Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 6 - Databáze v C# .NET - INSERT, UPDATE, DELETE a COUNT

V minulé lekci, SqlDataReader a připojená databáze v C# .NET, jsme se naučili číst data z databáze pomocí SqlDataReaderu. Také jsme se naučili používat parametrizované dotazy, které znemožňují útok SQL injection.

Dnes si v C# .NET tutoriálu zkusíme obsah databáze měnit.

Vkládání, mazání a editace hodnot

Základní databázové operace se často označují zkratkou CRUD. Jedná se o operace:

  • Create (vytvořit),
  • Read (číst),
  • Update (aktualizovat),
  • Delete (odstranit).

Minule jsme si ukázali operaci Read. Již víme, že data z databáze čteme příkazem SELECT a potřebujeme k tomu *DataReader.

INSERT

Vyzvěme uživatele k zadání slovíčka anglicky a česky. Nové slovíčko vložíme do databáze:

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))
{
    spojeni.Open();
    sqlDotaz.Parameters.AddWithValue("@anglicky", anglicky);
    sqlDotaz.Parameters.AddWithValue("@cesky", cesky);
    int radku = sqlDotaz.ExecuteNonQuery();
    Console.WriteLine(radku);
}

SQL dotaz pro vložení nového řádku do tabulky začíná příkazem INSERT INTO, následuje název tabulky. V závorkách vypíšeme názvy sloupců, do kterých vkládáme hodnoty. Za klauzuli VALUES vypíšeme opět do závorky hodnoty. Nemělo by vás překvapit, že použijeme opět parametry.

Dotaz vložíme do instance třídy SqlCommand. Dodáme mu potřebné parametry a spustíme ho metodou ExecuteNonQuery(). Metoda vrací počet ovlivněných řádků. Pro ověření, že vložení proběhlo, si je vypišme do konzole:

Konzolová aplikace
Zadej nové slovíčko anglicky
keyboard
Zadej nové slovíčko česky
klávesnice
1

Metoda ExecuteNonQuery() vrátila hodnotu 1. Můžeme spustit původní kód naší aplikace, který vypisoval všechna slovíčka nebo nahlédnout do samotné databáze v designeru. Vidíme, že klávesnice je nově mezi slovíčky:

MS-SQL databáze ve Visual Studio - Databáze v C# - ADO.NET

DELETE

Přejděme k mazání záznamů. Oproti vkládání není v podstatě žádný rozdíl, jen jsem chtěl, abychom si pro úplnost ukázali všechny dotazy z CRUD:

Console.WriteLine("Zadej anglické slovíčko, které chceš vymazat");
string anglicky = Console.ReadLine();
string dotaz = "DELETE FROM Word WHERE English=@anglicky";
using (SqlCommand sqlDotaz = new SqlCommand(dotaz, spojeni))
{
    spojeni.Open();
    sqlDotaz.Parameters.AddWithValue("@anglicky", anglicky);
    int radku = sqlDotaz.ExecuteNonQuery();
    Console.WriteLine(radku);
}

C# kód se vůbec nezměnil. SQL dotaz začíná DELETE FROM a pokračuje názvem tabulky. Následuje podmínka WHERE, kterou již dobře známe.

Nikdy na podmínku v příkazu DELETE nezapomeňte, jinak dojte k vymazání všech záznamů v tabulce!

Aplikaci opět vyzkoušejme:

Konzolová aplikace
Zadej anglické slovíčko, které chceš vymazat
keyboard
1

Zkontrolujte si, že klávesnice mezi slovíčky již opravdu není. Můžeme zkusit i zadat neexistující slovíčko k vymazání, počet ovlivněných řádků bude 0:

Konzolová aplikace
Zadej anglické slovíčko, které chceš vymazat
binary tree
0

UPDATE

Naši čtveřici dotazů zakončeme příkazem UPDATE, který vyvolá změnu. Naučme aplikaci měnit český překlad nějaké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))
{
    spojeni.Open();
    sqlDotaz.Parameters.AddWithValue("@anglicky", anglicky);
    sqlDotaz.Parameters.AddWithValue("@cesky", cesky);
    int radku = sqlDotaz.ExecuteNonQuery();
    Console.WriteLine(radku);
}

C# kód je opět nezměněný (pouze jsme přidali parametr). SQL dotaz začíná UPDATE, následuje název tabulky a dále klauzule SET. Po ní název sloupce, rovnítko a nová hodnota. Pokud bychom potřebovali updatovat více sloupců, zapíšeme to např. takto:

UPDATE Word SET Czech=@cesky, English=@anglicky WHERE Id=@id

Stejně jako u DELETE nikdy nesmíme zapomenout na klauzuli WHERE, jinak se updatují všechny řádky v tabulce.

Aplikaci opět vyzkoušejme:

Konzolová aplikace
Zadej anglické slovíčko, u kterého chceš upravit překlad
dog
Zadej nový překlad
stopovat
1

Zkontrolujte si, že se překlad změnil.

Hranaté závorky

Ještě jsme nezmínili použití hranatých závorek v dotazech. Pokud název nějakého sloupce koliduje s klíčovým slovem z SQL (např. se sloupec jmenuje Where), dáme ho do hranatých závorek. Často se setkáte s konvencí, kde se takto označují všechny názvy:

UPDATE [Word] SET [Czech]=@cesky, [English]=@anglicky WHERE [Id]=@id

Závěr

Výhodou připojeného přístupu k databázi je aktuálnost zpracovávaných dat i ve víceuživatelských aplikacích. Nevýhodou naopak může být časté připojování ke vzdálené databázi, větší objem přenesených dat i sekvenční čtení komponenty *DataReader, tedy například bez možnosti přechodu na předcházející záznam.

To je pro tento článek vše, v dalším se seznámíte s vkládáním, editováním a odstraňováním dat v připojených databázových aplikacích. Dnešní projekt je se zdrojovými kódy jako vždy v příloze.

V následujícím cvičení, Řešené úlohy k 1.-6. lekci Databáze v C# - ADO.NET, si procvičíme nabyté zkušenosti z předchozích lekcí.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 603x (1.02 MB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

Předchozí článek
SqlDataReader a připojená databáze v C# .NET
Všechny články v sekci
Databáze v C# - ADO.NET
Přeskočit článek
(nedoporučujeme)
Řešené úlohy k 1.-6. lekci Databáze v C# - ADO.NET
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
102 hlasů
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 se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity