5. diel - Pripojená databázová aplikácia vo VB.NET
V minulej lekcii, Prístupy pre prácu s relačnými databázami vo VB.NET , sme si uviedli prístupy pre prácu s
relačnou databázou, najmä DataSet
a technológiu LINQ to
SQL.
V dnešnom Databáze-ADO.NET tutoriále si uvedieme základy práce s databázou pomocou pripojeného prístupu.
Pripojovací reťazec
Aby sme sa mohli k databáze pripojiť, potrebujeme tzv. pripojovací
reťazec ConnectionString
. To je reťazec, ktorý obsahuje údaje
potrebné na pripojenie k databáze. Typicky obsahuje názov
databázy a prípadne heslo.
Získanie pripojovacieho reťazca
Pripojovací reťazec je možné vo Visual Studiu získať viacerými
spôsobmi. Jedným zo spôsobov je kliknúť v okne Server Explorer na
názov databázy a zvoliť Properties. Otvorí sa nám
okno Properties, kde nájdeme ConnectionString
v tomto
formáte:
Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=C:\Users\nazevUzivatele\SlovnicekDB.mdf;Initial Catalog=SlovnicekDB;Integrated Security=True
Vypísanie pripojovacieho reťazca
V prípade, že sme databázu pripojili cez Data Sources a zaškrtli
možnosť uloženia pripojovacieho reťazca do nastavenia projektu, tak k nemu
môžeme jednoducho pristupovať rovno v kóde cez triedu Settings
.
Vypíšme si ho do konzoly:
Dim connectionString As String = My.Settings.SlovnicekDBConnectionString Console.WriteLine(connectionString)
Výpis do konzoly vyzerá takto:
Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\SlovnicekDB.mdf;Initial Catalog=SlovnicekDB;Integrated Security=True
Vlastnosti
AttachDbFilename
a InitialCatalog
Vlastnosť InitialCatalog
odovzdáva názov
databázy, ku ktorej sa chceme pripojiť. Používa sa pre akúkoľvek
databázu (nielen lokálnu).
Vlastnosť AttachDbFilename
sa používa na pripojenie k
lokálnej databáze s príponou .mdf
. Tejto
vlastnosti sa odovzdáva cesta k súboru lokálnej databázy. Pripojovací
reťazec môže obsahovať obe vlastnosti naraz alebo len jednu z nich. V .NET
Framework aplikácii musí byť vždy u lokálnej databázy použitá vlastnosť
AttachDbFilename
.
Založenie projektu
Založíme si nový projekt, konzolovú aplikáciu. Na
začiatok projektu si deklarujeme menný priestor
Imports System.Data.SqlClient
.
Menný priestor System.Data.SqlClient
obsahuje
triedy pre prácu s SQL databázami.
Trieda
SQLConnectionStringBuilder
Každý poskytovateľ dát z ADO.NET potrebuje trochu iné údaje, a preto sa
niekedy pripojovací reťazec generuje pomocou triedy
SqlConnectionStringBuilder
. Stačí vytvoriť inštanciu tejto
triedy a naplniť jej vlastnosti požadovanými hodnotami. Výsledný reťazec
bude dostupný práve vo vlastnosti ConnectionString
.
Ak nechcete riešiť kompatibilitu s ďalšími poskytovateľmi, môžete tento krok preskočiť a vrátiť sa k nemu napríklad neskôr. V kurze si povieme od všetkého trochu. Nie je účelom vás odradiť a vyvolať dojem, aké sú databázy zložité. Ide o to, aby ste mali prehľad.
Zostavenie pripojovacieho reťazca
S využitím triedy SQLConnectionStrigBuilder
by sme zostavili
pripojovací reťazec k našej cvičnej databáze SlovnicekDB
takto:
Dim csb As SqlConnectionStringBuilder = New SqlConnectionStringBuilder() csb.DataSource = "=(localdb)\MSSQLLocalDB" csb.InitialCatalog = "SlovnicekDB" csb.IntegratedSecurity = True Dim připojovaciRetezec = csb.ConnectionString
Pripojenie k databáze
SlovnicekDB
Akonáhle máme pripojovací reťazec, môžeme sa pokúsiť o pripojenie k databáze.
Test spojenia s databázou
K databáze sa pokúsime pripojiť pomocou inštancie triedy
SqlConnection
, v ktorej konštruktoru odovzdáme pripojovací
reťazec. Pripojenie potom otvoríme zavolaním metódy 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("Aplikácia sa úspešne pripojila k databáze.") End Using
Je dobrým zvykom všetky databázové objekty tvoriť v bloku
Using
, aby došlo k rýchlemu zatvoreniu nepotrebných spojení.
Spojenie sa necháva otvorené len pri desktopových aplikáciách, kde to potom
vyžaduje nejaký databázový wrapper, typicky realizovaný statickou
triedou.
Úspešne sme sa pripojili k databáze:
Konzolová aplikácia
Aplikace se úspěšně připojila k databázi.
Databázové príkazy
Databázové príkazy sú zastúpené triedou SqlCommand
.
Umožňujú spustiť nad pripojenou databázou akýkoľvek SQL dotaz.
Aby sme mohli triedu SqlCommand
použiť, musíme
poznať syntax jazyka SQL. Tu si použitú syntax
popíšeme len skrátene.
Pri novej inštancii triedy SqlCommand
musíme naplniť dve
základné vlastnosti: Connection
a CommandText
. Do
vlastnosti CommandText
budeme písať SQL dotaz.
SQL dotazy budeme spúšťať metódami ExecuteReader()
,
ExecuteScalar()
alebo ExecuteNonQuery()
.
Metóda ExecuteReader()
Metódu ExecuteReader()
využijeme vtedy, ak SQL dotaz vracia
množinu dát. Napr. väčšina príkazov
SELECT
.
Metóda ExecuteScalar()
Pre metódu ExecuteScalar()
nájdeme uplatnenie, ak SQL dotaz
vracia jedinú hodnotu. Napr. príkaz SELECT
s
agregačnou funkciou (počet všetkých slovíčok).
Metóda ExecuteNonQuery()
Metódu ExecuteNonQuery()
použijeme na spúšťanie dotazov,
ktoré nevracajú žiadnu hodnotu. Ide napr. o príkazy
INSERT
, UPDATE
, DELETE
. Návratová
hodnota tejto metódy nesie informáciu o počte ovplyvnených riadkov.
Výpis z tabuľky Word
Pod náš príkaz
Console.WriteLine("Aplikace se úspěšně připojila k databázi.")
si teraz napíšeme kód, ktorým zistíme počet záznamov v
tabuľke Word
a vypíšeme ho 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íčok v Databáze je {0}", pocetSlovicek)
SQL klauzula sa väčšinou píšu veľkými písmenami.
Výsledok:
Konzolová aplikácia
Aplikace se úspěšně připojila k databázi.
Počet slovíček v Databázi je 6
Otázka začína slovom SELECT
(teda vyber). Ďalej nasleduje
COUNT(*)
, čím hovoríme, že nás zaujíma
počet. Hviezdička označuje, že chceme počítať s ohľadom
na všetky stĺpce. FROM Word
označuje, že dáta vyberáme z
tabuľky Word
.
Počet záznamov v tabuľke nikdy nezisťujeme tak, že si
načítame úplne všetky riadky aj s dátami a tie potom spočítame. Vrátený
výsledok je rovnaký, ako pri použití príkazu COUNT
. Lenže by
sme zbytočne zaťažili databázu načítaním hodnôt, ktoré vôbec
nevyužijeme.
V nasledujúcej lekcii, SqlDataReader a pripojená databáza vo VB.NET , sa naučíme čítať riadky z databázy
pomocou triedy SqlDataReader
a používať parametrizované
otázky, ktoré znemožňujú útok SQL injection.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 10x (1006.89 kB)
Aplikácia je vrátane zdrojových kódov v jazyku VB.NET