IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

6. diel - Databázy v C# .NET - INSERT, UPDATE, DELETE a COUNT

V minulej 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é otázky, ktoré znemožňujú útok SQL injection.

Dnes si v C# .NET tutoriále 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 užívateľa na zadanie slovíčka španielsky 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 dotaz 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.

Otázku 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 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 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:

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ť aj zadať 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 otázok zakončíme príkazom UPDATE, ktorý vyvolá zmenu. Naučme aplikáciu meniť anglický preklad nejakého španielskeho 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 dotaz začína UPDATE, nasleduje názov tabuľky a ďalej klauzula SET. Po nej názov stĺpca, znamienko rovnosti a nová hodnota. Pokiaľ 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 otázkach. Pokiaľ 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 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 nasledujúcom cvičení, Riešené úlohy k 1.-6. lekciu 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é 4x (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. lekciu Databáza v C# - ADO.NET
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
1 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