NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.

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

 

Předchozí článek
Přístupy pro práci s relačními databázemi ve VB.NET
Všechny články v sekci
Databáze ve VB.NET - ADO.NET
Přeskočit článek
(nedoporučujeme)
Kvíz - Databáze, přístupy, připojená aplikace ve VB-ADO.NET
Článek pro vás napsal Stanislav Zita
Avatar
Uživatelské hodnocení:
2 hlasů
Aktivity