6. diel - Databázy v C# .NET - INSERT, UPDATE, DELETE a COUNT
V predchádzajúcej lekcii, SqlDataReader a pripojená databáza v C# .NET, sme sa naučili čítať dáta z databázy pomocou SqlDataReaderu. Tiež sme sa naučili používať parametrizované dopyty, ktoré znemožňujú útok SQL injection.
Dnes si v kurze C# .NET 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 na to
*DataReader.
INSERT
Vyzvime používateľa na zadanie slovíčka po slovensky a anglicky. Nové slovíčko vložíme do databázy:
Console.WriteLine("Enter a new word in Spanish"); string spanish = Console.ReadLine(); Console.WriteLine("Enter a new word in English"); string english = Console.ReadLine(); string query = "INSERT INTO Word (Spanish, English) VALUES (@spanish, @english)"; using (SqlCommand sqlQuery = new SqlCommand(query, connection)) { connection.Open(); sqlQuery.Parameters.AddWithValue("@spanish", spanish); sqlQuery.Parameters.AddWithValue("@english", english); int row = sqlQuery.ExecuteNonQuery(); Console.WriteLine(row); }
SQL dopyt pre vloženie nového riadka 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.
Dopyt vložíme do inštancie triedy SqlCommand. Pridá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 ich vypíšme do konzoly:
Konzolová aplikácia
Enter a new word in Spanish
teclado
Enter a new word in English
keyboard
1
Metóda 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 samotnej databázy v designeri. Vidíme, že
klávesnica je novo medzi slovíčkami:

DELETE
Prejdime na mazanie záznamov. Oproti vkladaniu nie je v podstate žiadny rozdiel, len som chcel, aby sme si pre úplnosť ukázali všetky otázky z CRUD:
Console.WriteLine("Enter the Spanish word you want to delete"); string spanish = Console.ReadLine(); string query = "DELETE FROM Word WHERE Spanish=@spanish"; using (SqlCommand sqlQuery = new SqlCommand(query, connection)) { connection.Open(); sqlQuery.Parameters.AddWithValue("@spanish", spanish); int row = sqlQuery.ExecuteNonQuery(); Console.WriteLine(row); }
C# kód sa vôbec nezmenil. SQL dopyt 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:
Konzolová aplikácia
Enter the Spanish word you want to delete
teclado
1
Skontrolujte si, že klávesnica medzi slovíčkami už naozaj nie je.
Môžeme skúsiť zadať aj neexistujúce slovíčko na vymazanie, počet
ovplyvnených riadkov bude 0:
Konzolová aplikácia
Enter the Spanish word you want to delete
árbol binario
0
UPDATE
Našu štvoricu dopytov zakončíme príkazom UPDATE, ktorý
vyvolá zmenu. Naučme aplikáciu meniť slovenský preklad nejakého
anglického slova:
Console.WriteLine("Enter the Spanish word for which you want to edit the translation"); string spanish = Console.ReadLine(); Console.WriteLine("Enter a new translation"); string english = Console.ReadLine(); string query = "UPDATE Word SET English=@english WHERE Spanish=@spanish"; using (SqlCommand sqlQuery = new SqlCommand(query, connection)) { connection.Open(); sqlQuery.Parameters.AddWithValue("@spanish", spanish); sqlQuery.Parameters.AddWithValue("@english", english); int row = sqlQuery.ExecuteNonQuery(); Console.WriteLine(row); }
C# kód je opäť nezmenený (iba sme pridali parameter). SQL dopyt 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 English=@english, Spanish=@spanish WHERE Id=@id
Rovnako ako u DELETE nikdy nesmieme
zabudnúť na klauzulu WHERE, inak sa updatujú všetky
riadky v tabuľke.
Aplikáciu opäť vyskúšajme:
Konzolová aplikácia
Enter the Spanish word for which you want to edit the translation
perro
Enter a new translation
trace
1
Skontrolujte si, že sa preklad zmenil.
Hranaté zátvorky
Ešte sme nespomenuli použitie hranatých zátvoriek v dopytoch. 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 stretnete s
konvenciou, kde sa takto označujú všetky názvy:
UPDATE [Word] SET [English]=@english, [Spanish]=@spanish 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 komponentu *DataReader, teda napríklad bez
možnosti prechodu na predchádzajúci záznam.
To je v rámci tejto lekcie všetko, v ďalšej 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 nájdete aj so zdrojovými kódmi ako vždy v prílohe.
V nasledujúcom cvičení, Riešené úlohy k 1.-6. lekcii Databáza v C# - ADO.NET, si precvičíme 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é 6x (1.68 MB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

David sa informačné technológie naučil na