Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

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 na tieto účely obsiahnuté.

Dnes si v C# .NET tutoriále ukážeme základy práce s databázou pomocou pripojeného prístupu.

Všade v ďalšom texte, kde sa pred názvom triedy objaví *, ju môžete nahradiť príslušným poskytovateľom dát.

Získanie ConnectionStringu

Aby sme sa mohli k DB pripojiť, potrebujeme 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.

ConnectionString je možné vo Visual Studiu získať viacerými spôsobmi. Univerzálny spôsob, ktorý funguje ako v .NET Framework, tak aj v .NET Core, je otvoriť si okno "Server Explorer" alebo "SQL Server Object Explorer", kliknúť pravým tlačidlom na databázu a zvoliť "Properties". V okne "Properties" potom nájdeme ConnectionString, ktorý si niekam môžeme skopírovať:

Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\User\Documents\ICTdemy\SQL\DictionarySQL\DictionaryDB.mdf;Integrated Security=True

V prípade, že ste databázu pripojili cez "Data Sources" a zaškrtli možnosť uloženia ConnectionStringu do nastavenia projektu, tak k nemu môžete jednoducho pristupovať rovno v kóde cez triedu Settings. Vypíšme si ho do konzoly:

string connectionString = Properties.Settings.Default.DictionaryDBConnectionString;
Console.WriteLine(connectionString);

ConnectionString:

Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\DictionaryDB.mdf;Integrated Security=True

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. ConnectionString 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.

Príprava .NET Core projektu

Triedy pre prácu s SQL databázami obsahuje menný priestor System.Data.SqlClient. V .NET Framework je tento menný priestor už v základe a nemusíme nič riešiť. .NET Core ho však neobsahuje a musí sa doinštalovať prostredníctvom NuGet balíčka.

Ak používame .NET Core, tak klikneme pravým tlačidlom myši do Solution Exploreru a potom na správu balíčkov NuGet hned pod "Add" (Manage NuGet packages for Solution...). Tu v záložke Browse vyberieme System.Data.SqlClient a nainštalujeme:

System data SQL client install - Databázy v C# - ADO.NET

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 napríklad neskôr. V kurze si povieme od všetkého trochu, účelom nie je, aby vás to odradilo a vyvolalo dojem, aké 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čnej databáze DictionaryDB.

Riešenie
SqlConnectionStringBuilder csb = new SqlConnectionStringBuilder();
csb.DataSource = @"(LocalDB)\MSSQLLocalDB";
csb.InitialCatalog = "DictionaryDB";
csb.IntegratedSecurity = true;
string connectionString = csb.ConnectionString;

Nezabudnite deklarovať príslušný menný priestor (pridať using System.Data.SqlClient;).

Pripojenie

Akonáhle máme ConnectionString, môžeme sa k databáze pripojiť. To urobíme vytvorením inštancie triedy *Connection, ktoré ConnectionString odovzdáme v konštruktore. Pripojenie potom otvoríme zavolaním metódy Open(). Je dobrým zvykom všetky databázové objekty tvoriť v bloku using, aby došlo k rýchlemu zatvoreniu nepotrebných spojení. Druhým prístupom je nechávať spojenie otvorené, čo sa robí len pri desktopových aplikáciách a vyžaduje si to nejaký databázový wrapper, typicky realizovaný statickou 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=(localdb)\MSSQLLocalDB;Initial Catalog=DictionaryDB;Integrated Security=True";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    Console.WriteLine("Application has successfully connected to the database.");
}
Console.ReadKey();

Výsledok:

Konzolová aplikácia
Application has successfully connected to the database.

Ďalší kód budeme písať pod connection.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 podrobne venovaných hneď niekoľko kurzov).

Pri novej inštancii triedy *Command musíme naplniť 2 základné vlastnosti - Connection (pozri príklad 2) a CommandText. Ten bude práve obsahovať SQL dotaz. Potom môžeme príkaz spustiť.

Na spustenie slúžia metódy:

  • ExecuteReader() - Túto prvú využijeme vtedy, ak SQL dotaz vracia množinu dát (väčšina príkazov SELECT, napr. dotaz na jedno alebo viac slovíčok).
  • ExecuteScalar() - Druhá metóda nájde svoje uplatnenie, ak SQL dotaz vracia jedinú hodnotu (typicky SELECT s agregačnou funkciou, napr. počet všetkých slovíčok).
  • ExecuteNonQuery() - Posledná metóda sa používa na spúšťanie dotazov, ktoré nevracajú žiadnu hodnotu (príkazy 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 command = new SqlCommand();
command.Connection = connection;
command.CommandText = "SELECT COUNT(*) FROM Word";
int amountOfWords = (int)command.ExecuteScalar();  // the method returns object type - it is necessary to convert to int
connection.Close();
Console.WriteLine("The amount of words in the DB is {0}", amountOfWords);

Výsledok:

Konzolová aplikácia
The amount of words in the DB is 6

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ý dotazovací jazyk. Každá otázka vyzerá preto ako jednoduchá anglická veta.

Niektorí začiatočníci zisťujú počet záznamov v tabuľke tak, že si načítajú úplne všetky riadky aj s dátami a tie potom spočítajú (riadky sa naučíme načítať 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 nasledujúcom kvíze, Kvíz - Databáza, prístupy, pripojená aplikácia v C#- ADO.NET , si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

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é 0x (10.19 MB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

 

Predchádzajúci článok
Prístupy pre prácu s relačnými databázami v .NET
Všetky články v sekcii
Databázy v C# - ADO.NET
Preskočiť článok
(neodporúčame)
Kvíz - Databáza, prístupy, pripojená aplikácia v C#- ADO.NET
Článok pre vás napísal JOF
Avatar
Užívateľské hodnotenie:
2 hlasov
Aktivity