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 10x (1006.89 kB)
Aplikace je včetně zdrojových kódů v jazyce VB.NET

