NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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í.

Diskuze – Lekce 18 - MS-SQL - Datové typy podrobněji

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
František Střelka:19.9.2019 6:01

Po dokončení sekce jsem tápal, jak databázi "propojit" s logickou vrstvou aplikace (ve VB .NET) a také, jak SQL zakomponovat do OOP. Zkombinoval jsem několik návodů jak se mi to (laicky :-) ) zdálo nejvhodnější. Možná to někomu pomůže, ale budu hlavně rád, když mi poradíte, co je třeba doladit, případně zda volit zcela jinou logiku.
V kódu je čtení/zápis dat z/do tabulky s uživateli, (jako v předchozích lekcích). Setříděná data načítám do listu() s instancemi třídy Uzivatel a s tím dál již pracuji klasicky v OOP.
Module1.vb

Dim uzivatele As New Uzivatele()
Try
     uzivatele.NactiDataSQL()
Catch ex As Exception
     Console.WriteLine("Nepodařilo se načíst data z databáze!{0}Chyba: {1}", vbCrLf, ex.Message)
End Try
Try
     uzivatele.ZapisNovehoUzivateleDoSQL("Fanda", "[email protected]")
Catch ex As Exception
     Console.WriteLine("Nepodařilo se zapsat data do databáze!{0}Chyba: {1}", vbCrLf, ex.Message)
End Try

Uzivatele.vb

Imports System.Data.SqlClient

Public Class Uzivatele
    Property listUzivatelu As List(Of Uzivatel)
    Private conn As SqlConnection
    Private connectionString As String
    Private comm As SqlCommand
    Private query As String

    Public Sub New()
        ConnectionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\DBF\RedakcniSystem.mdf;Integrated Security=True" ' s relativní cestou
        ' Absolutní cesta: "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=Y:\Mfdesign\VBnet_aplikace\Vyuka\ITnetwork\MS_SQL\Lekce7azDotazyPresViceTabulekRedakcniSys\Lekce7_az_RedakcniSystem\DBF\RedakcniSystem.mdf;Integrated Security=True"
        listUzivatelu = New List(Of Uzivatel)
    End Sub
    ''' <summary>
    ''' Naplní llistUzivatelu setříděnými daty z SQL
    ''' </summary>
    ''' <remarks>třída Uzvatel má stejné Property jako jsou názvy sloupců v SQL tabulce, vč. id </remarks>
    Public Sub NactiDataSQL()
        listUzivatelu.Clear()
        query = "SELECT * FROM [Uzivatele] ORDER BY [Prezdivka]"
        Using conn = New SqlConnection(connectionString)
            Using comm = New SqlCommand()
                comm.Connection = conn
                comm.CommandType = CommandType.Text
                comm.CommandText = query
                conn.Open()
                Dim dr = comm.ExecuteReader()
                While dr.Read()
                    listUzivatelu.Add(New Uzivatel(dr("Id"), dr("Prezdivka"), dr("Email")))
                End While
            End Using
        End Using
    End Sub
    ''' <summary>
    ''' Zápis nového řádku (uživatele)
    ''' </summary>
    ''' <remarks> </remarks>
    Public Sub ZapisNovehoUzivateleDoSQL(prezdivka As String, email As String)
        query = "INSERT INTO [Uzivatele] ([Prezdivka], [Email]) VALUES (@prezdivka, @email)"
        Using conn = New SqlConnection(connectionString)
            Using comm = New SqlCommand()
                comm.Connection = conn
                comm.CommandType = CommandType.Text
                comm.CommandText = query
                comm.Parameters.AddWithValue("@prezdivka", prezdivka)
                comm.Parameters.AddWithValue("@email", email)
                conn.Open()
                comm.ExecuteNonQuery()
            End Using
        End Using
    End Sub
 
Odpovědět
19.9.2019 6:01
Avatar
Jaroslav Drobek:31.10.2022 15:51

Hodnocení:

  • Poprvé se setkávám s označením "desetinná" pro čísla vlevo od desetinné čárky, ehm, tečky..
  • Přibližná čísla: výklad zavádějící a nejasný, příklad nicneukazující..
  • "tzn. Na" má být s malým "n" po tečce.
  • V pravých sloupcích tabulek by "max" mohlo být odděleno čárkou (v polích, kde chybí kroužek nad "u").
  • "..ukládání binárních souborů, například obrázků.."
  • Ostatní datové typy: na základě kódu z příkladu vznikne tabulka s jedním záznamem - v ukázce jsou tři.
 
Odpovědět
31.10.2022 15:51
Avatar
David Novák
Tvůrce
Avatar
Odpovídá na Jaroslav Drobek
David Novák:5.10.2023 7:44

Ahoj Jaroslave, děkujeme za podnět. Lekci jsem předal k aktualizaci

 
Odpovědět
5.10.2023 7:44
Avatar
Petr Vocel
Tvůrce
Avatar
Petr Vocel:15.4.2024 17:14

Chybí mi praktické ukázky použití typu Timestamp a Uniqueidentifier k čemu a kdy. Jak Uniqueidentifier unikátní. Id je také unikátní, když se doplňuje automaticky.

 
Odpovědět
15.4.2024 17:14
Avatar
Marek Němec
Člen
Avatar
Marek Němec:28.8.2024 13:01

Zajímalo by mě, zda budeme databázi používat i na větší soubory (gigabytové zip složky) a pokud ano, tak jaký datový typ jim přiřadit?

 
Odpovědět
28.8.2024 13:01
Avatar
Pavel Novák
Člen
Avatar
Pavel Novák:6. března 13:07

Přesná čísla, Přibližná čísla - my jsme na základní škole používali přirozená a reálná, ale to bylo v minulém tisíciletí, třeba je to teď jinak.

Řetězce s podporou unikódu
"Lze tak ukládat národní znaky, například diakritiku."
Bylo by dobré vysvětlit co, kde a jak nastavit, aby to opravdu fungovalo. V uvedeném příkladu je vložen řetězec 'ěščřžýáíé', ale výstupem je řetězec 'ešcržýáíé'.

 
Odpovědět
6. března 13:07
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 16.