7. diel - Databázy vo VB.NET - INSERT, UPDATE, DELETE a COUNT
V minulej lekcii, SqlDataReader a pripojená databáza vo VB.NET , sme sa naučili čítať dáta z databázy
pomocou triedy SqlDataReader
a používať parametrizované
otázky, ktoré znemožňujú útok SQL injection.
V dnešnom Databáze - ADO.NET tutoriále sa naučíme
pridávať, mazať, editovať
a počítať záznamy v MS-SQL databáze vo VB.NET pomocou
triedy SqlCommand
.
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ť).
SELECT
a triedu
SqlDataReader
. Dnes sa naučíme zostávajúce databázové
operácie.
Pracujeme s aplikáciou z lekcie Vytvorenie lokálnej databázy vo Visual Studio vo VB.NET, ktorú v jednotlivých lekciách upravujeme.
Operácia Create
Operáciu Create si ukážeme na vloženie nového
slovíčka do databázy SQL príkazom INSERT
. O anglické a
slovenské znenie slovíčka požiadame užívateľa:
Using pripojeni As SqlConnection = New SqlConnection(connectionString) pripojeni.Open() Console.WriteLine("Zadaj nové slovíčko anglicky") Dim anglicky As String = Console.ReadLine() Console.WriteLine("Zadaj nové slovíčko česky") Dim cesky As String = Console.ReadLine() Dim dotaz As String = "INSERT INTO Word (English, Czech) VALUES (@anglicky, @cesky)" Using sqlDotaz As SqlCommand = New SqlCommand(dotaz, pripojeni) sqlDotaz.Parameters.AddWithValue("@anglicky", anglicky) sqlDotaz.Parameters.AddWithValue("@cesky", cesky) Dim radku As Integer = sqlDotaz.ExecuteNonQuery() Console.WriteLine(radku) End Using pripojeni.Close() End Using
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 pomocou nám už známych zástupných
značiek chrániacich pred SQL injekciou.
Dotaz sqlDotaz
potom vložíme do inštancie triedy
SqlCommand
. Dodáme mu potrebné parametre a spustíme ho metódou
ExecuteNonQuery()
. Metóda ExecuteNonQuery()
vracia
počet ovplyvnených riadkov. Pre overenie, že vloženie
prebehlo, si ich vypíšme do konzoly:
Konzolová aplikácia
Zadaj nové slovíčko anglicky
keyboard
Zadaj nové slovíčko česky
klávesnice
1
Metóda ExecuteNonQuery()
vrátila hodnotu 1
.
Pre kontrolu môžeme spustiť náš kód pre výpis
všetkých slovíčok alebo v okne SQL Server Object Explorer
nahliadnuť do našej databázy SlovnicekDB
, tabuľky
dbo.Word
.
v okne SQL Server Object Explorer vidíme, že slovíčko
klávesnice
sa medzi slovíčkami už nachádza:

Operácia Delete
Pomocou operácie Delete si implementujeme mazanie záznamov
SQL príkazom DELETE
:
Using pripojeni As SqlConnection = New SqlConnection(connectionString) pripojeni.Open() Console.WriteLine("Zadaj anglické slovíčko, ktoré chceš vymazať") Dim anglicky As String = Console.ReadLine() Dim dotaz As String = "DELETE FROM Word WHERE English=@anglicky" Using sqlDotaz As SqlCommand = New SqlCommand(dotaz, pripojeni) sqlDotaz.Parameters.AddWithValue("@anglicky", anglicky) Dim radku As Integer = sqlDotaz.ExecuteNonQuery() Console.WriteLine(radku) End Using pripojeni.Close() End Using
VB.NET 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.
Na podmienku WHERE
v príkaze
DELETE
nesmieme nikdy zabudnúť. Došlo by k vymazaniu všetkých
záznamov v tabuľke!
Aplikáciu opäť vyskúšajme:
Konzolová aplikácia
Zadaj anglické slovíčko, ktoré chceš vymazať
keyboard
1
Zase si skontrolujme, ž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 potom bude 0
:
Konzolová aplikácia
Zadaj anglické slovíčko, ktoré chceš vymazať
binary tree
0
Operácia Update
Poslednou databázovou operáciou je operácia Update,
ktorú aplikujeme SQL príkazom UPDATE
. Naučme aplikáciu meniť
slovenský preklad nejakého anglického slova:
Using pripojeni As SqlConnection = New SqlConnection(connectionString) pripojeni.Open() Console.WriteLine("Zadaj anglické slovíčko, u ktorého chceš upraviť preklad") Dim anglicky As String = Console.ReadLine() Console.WriteLine("Zadaj nový preklad") Dim cesky As String = Console.ReadLine() Dim dotaz As String = "UPDATE Word SET Czech=@cesky WHERE English=@anglicky" Using sqlDotaz As SqlCommand = New SqlCommand(dotaz, pripojeni) sqlDotaz.Parameters.AddWithValue("@anglicky", anglicky) sqlDotaz.Parameters.AddWithValue("@cesky", cesky) Dim radku As Integer = sqlDotaz.ExecuteNonQuery() Console.WriteLine(radku) End Using pripojeni.Close() End Using
VB.NET kód je opäť veľmi podobný. 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 aktualizovať viac
stĺpcov, zapíšeme to napr. takto:
UPDATE Word SET Czech=@cesky, English=@anglicky WHERE Id=@id
Rovnako ako pri príkaze DELETE
nikdy nesmieme
zabudnúť na klauzulu WHERE
, inak sa zmenia všetky riadky v
tabuľke!
Aplikáciu opäť vyskúšajme:
Konzolová aplikácia
Zadaj anglické slovíčko, u ktorého chceš upraviť preklad
dog
Zadaj nový preklad
stopovat
1
Skontrolujeme 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. stĺpec sa volá Where
), dáme ho do hranatých zátvoriek.
Často sa stretávame s konvenciou, 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
komponentu SqlDataReader
, teda napríklad bez možnosti prechodu na
predchádzajúci záznam.
V budúcej lekcii, Databáza vo VB.NET - DataSet - Filtrovanie a zoradenie dát , načítame dáta z databázy do dátovej sady
DataSet
a naučíme sa dáta filtrovať a radiť.
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é 2x (983.68 kB)
Aplikácia je vrátane zdrojových kódov v jazyku VB.NET