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í.

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ť).
Z predchádzajúcich lekcií už poznáme operáciu Read, čítanie dát z databázy príkazom 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:

Databáza vo VB.NET - ADO.NET

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

 

Predchádzajúci článok
SqlDataReader a pripojená databáza vo VB.NET
Všetky články v sekcii
Databáza vo VB.NET - ADO.NET
Preskočiť článok
(neodporúčame)
Databáza vo VB.NET - DataSet - Filtrovanie a zoradenie dát
Článok pre vás napísal Stanislav Zita
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Aktivity