Lekce 4 - Připojená databázová aplikace v C# .NET

Vydávání, hosting a aktualizace umožňují jeho sponzoři.
V minulé lekci, Přístupy pro práci s relačními databázemi v .NET, jsme si popsali různé přístupy pro práci s databází v objektových jazycích a také technologie, které jsou v .NET frameworku pro tyto účely obsaženy. Dnes si v C# .NET tutoriálu ukážeme základy práce s databázi pomocí připojeného přístupu.
Pozn.: Všude v dalším textu, kde se před názvem třídy objeví
*
, ji můžete nahradit příslušným poskytovatelem dat.
Založte si nový projekt, konzolovou aplikaci, kterou pojmenujte
SlovickaSQL
.
Získání ConnectionStringu
Abyste se mohli k DB připojit, potřebujete tzv. ConnectionString. To je řetězec, který obsahuje údaje potřebné k připojení k databázi. Typicky je zde název databáze a případně heslo.
Ve Visual Studio si zobrazte Database Explorer (View -> Other Windows
-> Database Explorer), ve starších verzích VS se toto okno jmenuje Server
Explorer. Přidáme nové připojení a v následujícím dialogu zkontrolujeme,
že máme v DataSource nastaveno "Microsoft SQL Server (SqlClient)". Do Server
name zadáme "localhost\JMENO_VASEHO_SERVERU"
a dole vybereme naši
databázi SlovnicekDB
. Spojení můžete otestovat tlačítkem Test
Connection. Potvrdíme.
Jakmile nové spojení v Database Exploreru označíte a pravým zvolíte Properties, bude vám zobrazen ConnectionString. Ten si někam zkopírujte, můj vypadá takto:
Data Source=localhost\MSSQLSERVER2008;Initial Catalog=SlovnicekDB;Integrated Security=True
Váš SQL server se bude dost možná jmenovat SQLEXPRESS
místo
MSSQLSERVER2008
.
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
*ConnectionStringBuilder
. 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,
účelem není aby vás to odradilo a vyvolalo dojem, jak jsou databáze
složité, ale abyste měli přehled.
Příklad 1
S využitím třídy SQLConnectionStrigBuilder
sestavte
připojovací řetězec k naší cvičné databázi
SlovnicekDB
.
Řešení
SqlConnectionStringBuilder csb = new SqlConnectionStringBuilder(); csb.DataSource = @"localhost\SQLEXPRESS"; csb.InitialCatalog = "SlovnicekDB"; csb.IntegratedSecurity = true; string pripojovaciRetezec = csb.ConnectionString;
Pozn.: Nezapomeňte otevřít příslušný jmenný prostor
(using System.Data.SqlClient;
).
Připojení
Jakmile máme ConnectionString, můžeme se k DB připojit. To uděláme
vytvořením instance třídy *Connection
, které ConnectionString
předáme v konstruktoru. Připojení pak otevřete zavoláním metody
Open()
. 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í. Druhým
přístupem je nechávat spojení otevřené, což se dělá jen u desktopových
aplikací a vyžaduje to nějaký databázový wrapper, typicky realizovaný
statickou třídou.
Příklad 2
Otestujte spojení s databází s pomocí připojovacího řetězce z příkladu 1. Vypište do konzole, zda se spojení podařilo otevřít nebo ne.
Řešení
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ýsledek:

Další kód budeme psát pod pripojeni.Open();
.
Databázové příkazy
Databázové příkazy jsou zastoupeny třídou *Command
.
Umožňují spustit nad připojenou databází jakýkoliv SQL dotaz. Pro jejich
vytvoření tedy musíte znát syntaxi jazyka SQL (budu se je snažit trochu
popsat i zde, nicméně SQL je na ITnetwork věnováno hned několik sekcí). U
nové instance třídy *Command
musíte naplnit 2 základní
vlastnosti - Connection
(viz příklad 2) a
CommandText
. Ten bude právě obsahovat SQL dotaz. Poté můžete
příkaz spustit. Ke spuštění slouží metody ExecuteReader()
,
ExecuteScalar()
a ExecuteNonQuery()
. Tu první
využijete tehdy, pokud SQL dotaz vrací množinu dat (většina SELECTů,
např. dotaz na jedno nebo více slovíček). Druhá nalezne své uplatnění,
pokud SQL dotaz vrací jedinou hodnotu (typicky SELECT
s
agregační funkcí, např. počet všech slovíček). Poslední se používá
ke spouštění dotazů, které nevracejí žádnou hodnotu
(INSERT
, UPDATE
, DELETE
, např. vložení
slovíčka). Její návratová hodnota nese informaci o počtu "ovlivněných"
řádků.
Příklad 3
Vytvořte příkaz, který z připojené databáze z příkladu 2 získá
počet záznamů v tabulce Word
a vypíše jej na obrazovku.
Řešení
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ýsledek:

Dotaz začíná slovem SELECT
(tedy vyber). SQL klauzule se
většinou píší velkými písmeny. Dále následuje COUNT(*)
,
tí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. Jednoduché, že? Mimochodem, SQL se dříve
jmenovalo SEQUEL, kde ono EQUEL označovalo anglický dotazovací jazyk. Každý
dotaz vypadá proto jako jednoduchá anglická věta.
Pozn.: Někteří začátečníci zjišťují počet záznamů v tabulce
tak, že si načtou úplně všechny řádky i s daty a ty potom spočítají
(řádky se naučíme načítat příště). Vrácený výsledek je sice stejný
jako výsledek při použití COUNT
, jenže jsme databázi
zbytečně zatížili načtením hodnot, které vůbec nevyužijeme. Mezi
"načíst jedno číslo" nebo "načíst milion slovíček jen proto, abychom
zjistili, že jich je milion" je velký výkonový rozdíl
V příští lekci, SqlDataReader a připojená databáze v C# .NET, si z databáze tedy načteme nějaká slovíčka.
Stáhnout
Staženo 657x (34.42 kB)
Aplikace je včetně zdrojových kódů v jazyce C#
Komentáře


Zobrazeno 10 zpráv z 40. Zobrazit vše