Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

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:

MS-SQL databázy vo Visual Studio - Databázy v C# - ADO.NET

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#

 

Predchádzajúci článok
SqlDataReader a pripojená databáza v C# .NET
Všetky články v sekcii
Databázy v C# - ADO.NET
Preskočiť článok
(neodporúčame)
Riešené úlohy k 1.-6. lekcii Databáza v C# - ADO.NET
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
2 hlasov
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity