4. diel - Pripojená databázová aplikácia v C # .NET
V minulej lekcii, Prístupy pre prácu s relačnými databázami v .NET , sme si popísali rôzne prístupy pre prácu s databázou v objektových jazykoch a tiež technológie, ktoré sú v .NET frameworku pre tieto účely obsiahnuté. Dnes si v C# .NET tutoriálu ukážeme základy práce s databázu pomocou pripojeného prístupu.
Pozn .: Všade v ďalšom texte, kde sa pred názvom triedy objavia
*
, ju môžete nahradiť príslušným poskytovateľom
dát.
Založte si nový projekt, konzolovú aplikáciu, ktorú pomenujte
SlovickaSQL
.
Získanie ConnectionString
Aby ste sa mohli k DB pripojiť, potrebujete tzv. ConnectionString. To je reťazec, ktorý obsahuje údaje potrebné na pripojenie k databáze. Typicky je tu názov databázy a prípadne heslo.
Vo Visual Studio si prezrite Database Explorer (View -> Other Windows
-> Database Explorer), v starších verziách VS sa toto okno volá Server
Explorer. Pridáme nové pripojenie a v nasledujúcom dialógu skontrolujeme,
že máme v DataSource nastavené "Microsoft SQL Server (SqlClient)". Do Server
name zadáme "localhost\JMENO_VASEHO_SERVERU"
a dole vyberieme
našu databázu SlovnicekDB
. Spojenie môžete otestovať
tlačidlom Test Connection. Potvrdíme.
Akonáhle nové spojenie v Database Exploreri označíte a pravým zvolíte Properties, bude vám zobrazený ConnectionString. Ten si niekam skopírujte, môj vyzerá takto:
Data Source=localhost\MSSQLSERVER2008;Initial Catalog=SlovnicekDB;Integrated Security=True
Váš SQL server sa bude dosť možno menovať SQLEXPRESS
miesto
MSSQLSERVER2008
.
SQLConnectionStringBuilder
Každý poskytovateľ dát z ADO.NET potrebuje trochu iné údaje a preto sa
niekedy pripojovací reťazec generuje pomocou triedy
*ConnectionStringBuilder
. 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 treba neskôr. V kurze si povieme od všetkého
trochu, účelom nie je aby vás to odradilo a vyvolalo dojem, ako sú databázy
zložité, ale aby ste mali prehľad.
Príklad 1
S využitím triedy SQLConnectionStrigBuilder
zostavte
pripojovací reťazec k našej cvičné databáze SlovnicekDB
.
Riešenie
SqlConnectionStringBuilder csb = new SqlConnectionStringBuilder(); csb.DataSource = @"localhost\SQLEXPRESS"; csb.InitialCatalog = "SlovnicekDB"; csb.IntegratedSecurity = true; string pripojovaciRetezec = csb.ConnectionString;
Pozn .: Nezabudnite otvoriť príslušný menný priestor
(using System.Data.SqlClient;
).
Pripojenie
Akonáhle máme ConnectionString, môžeme sa k DB pripojiť. To urobíme
vytvorením inštancie triedy *Connection
, ktoré ConnectionString
odovzdáme v konstruktoru. Pripojenie potom otvorte zavolaním metódy
Open()
. Je dobrým zvykom všetky databázové objekty tvoriť v
bloku using, aby došlo k rýchlemu zatvorenie nepotrebných spojenie. Druhým
prístupom je nechávať spojenie otvorené, čo sa robí len u desktopových
aplikácií a vyžaduje to nejaký databázový wrapper, typicky realizovaný
statickú triedou.
Príklad 2
Otestujte spojenie s databázou s pomocou pripojovacieho reťazca z príkladu 1. Vypíšte do konzoly, či sa spojenie podarilo otvoriť alebo nie.
Riešenie
string connectionString = @"Data Source=localhost\MSSQLSERVER2008;Initial Catalog=SlovnicekDB;Integrated Security=True"; using (SqlConnection pripojeni = new SqlConnection(connectionString)) { pripojeni.Open(); Console.WriteLine("Aplikace se úspěšně připojila k databázi."); } Console.ReadKey();
výsledok:
Ďalšie kód budeme písať pod pripojeni.Open();
.
Databázové príkazy
Databázové príkazy sú zastúpené triedou *Command
.
Umožňujú spustiť nad pripojenou databázou akýkoľvek SQL dotaz. Pre ich
vytvorenie teda musíte poznať syntax jazyka SQL (budem sa ich snažiť trochu
popísať aj tu, avšak SQL je na ITnetwork venovaných hneď niekoľko
sekcií). U novej inštancie triedy *Command
musíte naplniť 2
základné vlastnosti - Connection
(pozri príklad 2) a
CommandText
. Ten bude práve obsahovať SQL dotaz. Potom môžete
príkaz spustiť. K spusteniu slúži metódy ExecuteReader()
,
ExecuteScalar()
a ExecuteNonQuery()
. Tú prvú
využijete vtedy, ak SQL dotaz vracia množinu dát (väčšina select, napr.
Dotaz na jedno alebo viac slovíčok). Druhá nájde svoje uplatnenie, ak SQL
dotaz vracia jedinú hodnotu (typicky SELECT
s agregačné
funkcií, napr. Počet všetkých slovíčok). Posledný sa používa na
spúšťanie dotazov, ktoré nevracajú žiadnu hodnotu (INSERT
,
UPDATE
, DELETE
, napr. Vloženie slovíčka). Jej
návratová hodnota nesie informáciu o počte "ovplyvnených" riadkov.
Príklad 3
Vytvorte príkaz, ktorý z pripojenej databázy z príkladu 2 získa počet
záznamov v tabuľke Word
a vypíše ho na obrazovku.
Riešenie
SqlCommand prikaz = new SqlCommand(); prikaz.Connection = pripojeni; prikaz.CommandText = "SELECT COUNT(*) FROM Word"; int pocetSlovicek = (int)prikaz.ExecuteScalar(); // metoda vrací typ object - je potřeba převést na int pripojeni.Close(); Console.WriteLine("Počet slovicek v DB je {0}", pocetSlovicek);
výsledok:
Otázka začína slovom SELECT
(teda vyber). SQL klauzula sa
väčšinou píšu veľkými písmenami. Ďalej nasleduje COUNT(*)
,
tý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. Jednoduché, že? Mimochodom, SQL sa predtým
volalo SEQUEL, kde ono EQUEL označovalo anglický dopytovací jazyk. Každý
dotaz vyzerá preto ako jednoduchá anglická veta.
Pozn .: Niektorí začiatočníci zisťujú počet záznamov v tabuľke
tak, že si načítajú úplne všetky riadky is dátami a tie potom
spočítajú (riadky sa naučíme načítavať nabudúce). Vrátený výsledok
je síce rovnaký ako výsledok pri použití COUNT
, lenže sme
databázu zbytočne zaťažili načítaním hodnôt, ktoré vôbec nevyužijeme.
Medzi "načítať jedno číslo" alebo "načítať milión slovíčok len preto,
aby sme zistili, že ich je milión" je veľký výkonový rozdiel
V budúcej lekcii, SqlDataReader a pripojené databázy v C # .NET , si z databázy teda načítame nejaká slovíčka.
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é 922x (1.03 MB)
Aplikácia je vrátane zdrojových kódov v jazyku C#