Lekce 5 - Připojená databázová aplikace ve VB.NET
V minulé lekci, Přístupy pro práci s relačními databázemi ve VB.NET, jsme si uvedli přístupy pro práci s relační
databází, zejména DataSet
a technologii LINQ to SQL.
V dnešním Databáze - ADO.NET tutoriálu si uvedeme základy práce s databází pomocí připojeného přístupu.
Připojovací řetězec
Abychom se mohli k databázi připojit, potřebujeme tzv. připojovací
řetězec ConnectionString
. To je řetězec, který obsahuje údaje
potřebné k připojení k databázi. Typicky obsahuje název
databáze a případně heslo.
Získání připojovacího řetězce
Připojovací řetězec lze ve Visual Studiu získat více způsoby. Jedním
ze způsobů je kliknout v okně Server Explorer na název
databáze a zvolit Properties. Otevře se nám okno
Properties, kde nalezneme ConnectionString
v tomto
formátu:
Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=C:\Users\nazevUzivatele\SlovnicekDB.mdf;Initial Catalog=SlovnicekDB;Integrated Security=True
Vypsání připojovacího řetězce
V případě, že jsme databázi připojili přes Data Sources a
zaškrtli možnost uložení připojovacího řetězce do nastavení projektu,
tak k němu můžeme jednoduše přistupovat rovnou v kódu přes třídu
Settings
. Vypišme si jej do konzole:
Dim connectionString As String = My.Settings.SlovnicekDBConnectionString Console.WriteLine(connectionString)
Výpis do konzole vypadá takto:
Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\SlovnicekDB.mdf;Initial Catalog=SlovnicekDB;Integrated Security=True
Vlastnosti
AttachDbFilename
a InitialCatalog
Vlastnost InitialCatalog
předává název
databáze, ke které se chceme připojit. Používá se pro jakoukoliv
databázi (nejen lokální).
Vlastnost AttachDbFilename
se využívá pro připojení k
lokální databázi s příponou .mdf
. Této
vlastnosti se předává cesta k souboru lokální databáze. Připojovací
řetězec může obsahovat obě vlastnosti najednou nebo jen jednu z nich. V
.NET Framework aplikaci musí být vždy u lokální databáze použita
vlastnost AttachDbFilename
.
Založení projektu
Založíme si nový projekt, konzolovou aplikaci. Na
začátek projektu si deklarujeme jmenný prostor
Imports System.Data.SqlClient
.
Jmenný prostor System.Data.SqlClient
obsahuje
třídy pro práci s SQL databázemi.
Třída
SQLConnectionStringBuilder
Každý poskytovatel dat z ADO.NET potřebuje trochu jiné údaje, a proto se
někdy připojovací řetězec generuje pomocí třídy
SqlConnectionStringBuilder
. Stačí vytvořit instanci této
třídy a naplnit její vlastnosti požadovanými hodnotami. Výsledný
řetězec bude dostupný právě ve vlastnosti
ConnectionString
.
Pokud nechcete řešit kompatibilitu s dalšími poskytovateli, můžete tento krok přeskočit a vrátit se k němu třeba později. V kurzu si řekneme od všeho trochu. Není účelem vás odradit a vyvolat dojem, jak jsou databáze složité. Jde o to, abyste měli přehled.
Sestavení připojovacího řetězce
S využitím třídy SQLConnectionStrigBuilder
bychom sestavili
připojovací řetězec k naší cvičné databázi SlovnicekDB
takto:
Dim csb As SqlConnectionStringBuilder = New SqlConnectionStringBuilder() csb.DataSource = "=(localdb)\MSSQLLocalDB" csb.InitialCatalog = "SlovnicekDB" csb.IntegratedSecurity = True Dim připojovaciRetezec = csb.ConnectionString
Připojení k databázi
SlovnicekDB
Jakmile máme připojovací řetězec, můžeme se pokusit o připojení k databázi.
Test spojení s databází
K databázi se pokusíme připojit pomocí instance třídy
SqlConnection
, v jejímž konstruktoru předáme připojovací
řetězec. Připojení pak otevřeme zavoláním metody Open()
:
Dim connectionString As String = "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=SlovnicekDB;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" Using pripojeni As SqlConnection = New SqlConnection(connectionString) pripojeni.Open() Console.WriteLine("Aplikace se úspěšně připojila k databázi.") End Using
Je dobrým zvykem všechny databázové objekty tvořit v bloku
Using
, aby došlo k rychlému zavření nepotřebných spojení.
Spojení se nechává otevřené jen u desktopových aplikací, kde to pak
vyžaduje nějaký databázový wrapper, typicky realizovaný statickou
třídou.
Úspěšně jsme se připojili k databázi:
Konzolová aplikace
Aplikace se úspěšně připojila k databázi.
Databázové příkazy
Databázové příkazy jsou zastoupeny třídou SqlCommand
.
Umožňují spustit nad připojenou databází jakýkoliv SQL dotaz.
Abychom mohli třídu SqlCommand
použít, musíme
znát syntaxi jazyka SQL. Zde si použitou syntaxi
popíšeme jen zkráceně.
U nové instance třídy SqlCommand
musíme naplnit dvě
základní vlastnosti: Connection
a CommandText
. Do
vlastnosti CommandText
budeme psát SQL dotaz. SQL
dotazy budeme spouštět metodami ExecuteReader()
,
ExecuteScalar()
nebo ExecuteNonQuery()
.
Metoda ExecuteReader()
Metodu ExecuteReader()
využijeme tehdy, pokud SQL dotaz vrací
množinu dat. Např. většina příkazů
SELECT
.
Metoda ExecuteScalar()
Pro metodu ExecuteScalar()
nalezneme uplatnění, pokud SQL
dotaz vrací jedinou hodnotu. Např. příkaz
SELECT
s agregační funkcí (počet všech
slovíček).
Metoda ExecuteNonQuery()
Metodu ExecuteNonQuery()
použijeme ke spouštění dotazů,
které nevracejí žádnou hodnotu. Jedná se např. o
příkazy INSERT
, UPDATE
, DELETE
.
Návratová hodnota této metody nese informaci o počtu ovlivněných
řádků.
Výpis z tabulky Word
Pod náš příkaz
Console.WriteLine("Aplikace se úspěšně připojila k databázi.")
si teď napíšeme kód, kterým zjistíme počet záznamů v
tabulce Word
a vypíšeme jej na obrazovku:
Dim prikaz As SqlCommand = New SqlCommand() prikaz.Connection = pripojeni prikaz.CommandText = "SELECT COUNT(*) FROM Word" Dim pocetSlovicek As Integer = prikaz.ExecuteScalar() pripojeni.Close() Console.WriteLine("Počet slovíček v Databázi je {0}", pocetSlovicek)
SQL klauzule se většinou píší velkými písmeny.
Výsledek:
Konzolová aplikace
Aplikace se úspěšně připojila k databázi.
Počet slovíček v Databázi je 6
Dotaz začíná slovem SELECT
(tedy vyber). Dále následuje
COUNT(*)
, čímž říkáme, že nás zajímá
počet. Hvězdička označuje, že chceme počítat s ohledem
na všechny sloupce. FROM Word
označuje, že data vybíráme z
tabulky Word
.
Počet záznamů v tabulce nikdy nezjišťujeme tak, že si
načteme úplně všechny řádky i s daty a ty potom spočítáme. Vrácený
výsledek je stejný jako při použití příkazu COUNT
. Jenže
bychom zbytečně zatížili databázi načtením hodnot, které vůbec
nevyužijeme.
V následujícím kvízu, Kvíz - Databáze, přístupy, připojená aplikace ve VB-ADO.NET , si vyzkoušíme nabyté zkušenosti z předchozích lekcí.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 9x (1006.89 kB)
Aplikace je včetně zdrojových kódů v jazyce VB.NET