6. diel - Databázy v C # .NET - INSERT, UPDATE, DELETE a COUNT
V minulej lekcii, Kvíz - Databáza, prístupy, pripojená aplikácia v C#- ADO.NET , sme sa naučili čítať dáta z databázy pomocou SqlDataReader. Tiež sme sa naučili používať parametrizované otázky, ktoré znemožňujú útok SQL injection. Dnes si v C# .NET tutoriálu skúsime obsah databázy meniť.
Vkladanie, mazanie a editácia hodnôt
Základné databázové operácie sa často označujú skratkou CRUD. Jedná
sa o operácie Create (vytvoriť), Read (čítať), Update (aktualizovať),
Delete (odstrániť). Minule sme si ukázali operáciu Read. Už vieme, že
dáta z databázy čítame príkazom SELECT
a potrebujeme k tomu
*DataReader
.
Insert
Výzva užívateľa na zadanie slovíčka anglicky a česky. Nové slovíčko vložíme do databázy.
Console.WriteLine("Zadej nové slovíčko anglicky"); string anglicky = Console.ReadLine(); Console.WriteLine("Zadej nové slovíčko česky"); string cesky = Console.ReadLine(); string dotaz = "INSERT INTO Word (English, Czech) VALUES (@anglicky, @cesky)"; using (SqlCommand sqlDotaz = new SqlCommand(dotaz, spojeni)) { sqlDotaz.Parameters.AddWithValue("@anglicky", anglicky); sqlDotaz.Parameters.AddWithValue("@cesky", cesky); int radku = sqlDotaz.ExecuteNonQuery(); Console.WriteLine(radku); }
SQL dotaz pre vloženie nového riadku do tabuľky začína príkazom
INSERT INTO
, nasleduje názov tabuľky. V zátvorkách vypíšeme
názvy stĺpcov, do ktorých vkladáme hodnoty. Za klauzulu VALUES
vypíšeme opäť do zátvorky hodnoty. Nemalo by vás prekvapiť, že
použijeme opäť parametre.
Otázka vložíme do inštancie triedy SqlCommand
. Dodáme mu
potrebné parametre a spustíme ho metódou ExecuteNonQuery()
.
Metóda vracia počet ovplyvnených riadkov, pre overenie, že vloženie
prebehlo, si musí byť výpis do konzoly.
ExecuteNonQuery()
vrátila hodnotu 1
. Môžeme
spustiť pôvodný kód našej aplikácie, ktorý vypisoval všetky slovíčka
alebo nahliadnuť do Microsoft SQL Management Studia. Vidíme, že klávesnica
je novo medzi slovíčkami:
Dele
Prejdime k mazanie záznamov. Oproti vkladanie nie je v podstate žiadny rozdiel, len som chcel, aby sme si pre úplnosť ukázali všetky otázky z CRUD.
Console.WriteLine("Zadej anglické slovíčko, které chceš vymazat"); string anglicky = Console.ReadLine(); string dotaz = "DELETE FROM Word WHERE Anglicky=@anglicky"; using (SqlCommand sqlDotaz = new SqlCommand(dotaz, spojeni)) { sqlDotaz.Parameters.AddWithValue("@anglicky", anglicky); int radku = sqlDotaz.ExecuteNonQuery(); Console.WriteLine(radku); }
C# kód sa vôbec nezmenil. SQL dotaz začína DELETE FROM
a
pokračuje názvom tabuľky. Nasleduje podmienka WHERE
, ktorú už
dobre poznáme. Nikdy na podmienku v príkaze DELETE
nezabudnite, inak dôjde k vymazaniu všetkých záznamov v tabuľke!
Aplikáciu opäť vyskúšajme:
Skontrolujte si, že klávesnica medzi slovíčkami už naozaj nie je.
Môžeme skúsiť aj zadať neexistujúce slovíčko k vymazaniu, počet
ovplyvnených riadkov bude 0
.
Update
Naši štvoricu otázok zakončíme príkazom UPDATE
, ktorý
vyvolá zmenu. Naučme aplikácii meniť český preklad nejakého anglického
slova:
Console.WriteLine("Zadej anglické slovíčko, u kterého chceš upravit překlad"); string anglicky = Console.ReadLine(); Console.WriteLine("Zadej nový překlad"); string cesky = Console.ReadLine(); string dotaz = "UPDATE Word SET Czech=@cesky WHERE English=@anglicky"; using (SqlCommand sqlDotaz = new SqlCommand(dotaz, spojeni)) { sqlDotaz.Parameters.AddWithValue("@anglicky", anglicky); sqlDotaz.Parameters.AddWithValue("@cesky", cesky); int radku = sqlDotaz.ExecuteNonQuery(); Console.WriteLine(radku); }
C# kód je opäť nezmenený (iba sme pridali parameter). SQL dotaz začína
UPDATE
, nasleduje názov tabuľky a ďalej klauzula
SET
. Po nej názov stĺpca, znamienko rovnosti a nová hodnota. Ak
by sme potrebovali updatovať viac stĺpcov, zapíšeme to napr. Takto:
UPDATE Word SET Czech=@cesky, English=@anglicky WHERE Id=@id
Rovnako ako u DELETE
nikdy nesmieme zabudnúť na
klauzulu WHERE
, inak sa updatuje všetky riadky v
tabuľke.
Aplikáciu opäť vyskúšajme:
Skontrolujte si, že sa preklad zmenil.
Hranaté zátvorky
Ešte sme nespomenuli použitie hranatých zátvoriek v dotazoch. Ak názov
nejakého stĺpca koliduje s kľúčovým slovom z SQL (napr. Sa stĺpec volá
Where
), dáme ho do hranatých zátvoriek. Často sa Seta s
konvencií, kde sa takto označujú všetky názvy:
UPDATE [Word] SET [Czech]=@cesky, [English]=@anglicky WHERE [Id]=@id
Záver
Výhodou pripojeného prístupu k databáze je aktuálnosť spracovávaných
dát aj vo viacužívateľských aplikáciách. Nevýhodou naopak môže byť
časté pripájanie k vzdialenej databáze, väčší objem prenesených dát aj
sekvenčné čítanie komponenty *DataReader
, teda napríklad bez
možnosti prechodu na predchádzajúci záznam.
To je pre tento článok všetko, v ďalšom sa zoznámite s vkladaním, editovaním a odstraňovaním dát v pripojených databázových aplikáciách. Dnešný projekt je so zdrojovými kódmi ako vždy v prílohe. V budúcej lekcii, Databázy v C # .NET - DataSet a SqlDataAdapter , si uvedieme odpojený prístup k databáze.
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é 603x (1.02 MB)
Aplikácia je vrátane zdrojových kódov v jazyku C#