Načtení hodnoty z DB do proměnné   zodpovězená otázka

VB.NET, SQL, Databáze

Zdravím všechny. Zkouším udělat ve VB ve VS2008 takovou malou databázovou aplikaci. Používám konektor do MySQL, kde mám DB program a v ní tabulky authorize a operations. Mám udělaný dataset a umím si v tableadapteru nastavit vlastní SELECT a vypsat do gridu.

V tabulce authorize mám sloupce ID, pass a account a ověřuji nad ní uživatele, který zadá přihlašovací jméno a heslo. Vyřešil jsem to zatím takto:

Imports MySql.Data.MySqlClient
Imports System.Data

Public Class LoginForm1
    Public conn As MySqlConnection
    Public myCommand As New MySqlCommand


    Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
        Dim SQL As String
        Dim authorizeAdapter As New programDataSetTableAdapters.authorizeTableAdapter
        Dim ReturnedCount As Integer

        SQL = "SELECT * FROM program.authorize WHERE (ID LIKE '" & UsernameTextBox.Text & "') AND (Pass LIKE '" & PasswordTextBox.Text & "')"

        myCommand.Connection = authorizeAdapter.Connection
        myCommand.CommandText = SQL

        Try

            myCommand.Connection.Open()
            authorizeAdapter.Adapter.SelectCommand = myCommand
            ProgramDataSet.Tables("authorize").Rows.Clear() 
            authorizeAdapter.Adapter.Fill(ProgramDataSet, "authorize")
            ReturnedCount = ProgramDataSet.Tables("authorize").Rows.Count
            
            authorizeAdapter.Connection.Close()


        Catch myerror As MySqlException
            MessageBox.Show("Chyba připojení k databázi: " & myerror.Message, "Připojení k Databázi", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Finally
            authorizeAdapter.Connection.Dispose()
        End Try

        If ReturnedCount <> 1 Then
            MessageBox.Show("Přihlašovací údaje nesouhlasí! Zkuste se přihlásit znovu. Error: " & ReturnedCount, "Přihlašovací údaje", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

        Else
            MessageBox.Show("Hodnota proměnné Test: " & test, "Test", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Me.Close()
        End If

    End Sub

Ověření řeším SELECTem a zjištěním počtu vracených řádků. Zároveň bych chtěl získat do proměnné (typ string) hodnotu ze sloupce account, ale tady už bohužel nevím jak. Budu vděčný za každou radu, jak na to. Princip by měl asi být stejný i pro jiné DB, ne?

Taky vím, že kód, který mám není asi nic moc a šlo by to vymyslet i líp. Takže pokud by mi někdo poradil i v tomhle nebudu se bránit. ;-)

Předem díky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Každý DataRow má kolekci Item, přes kterou lze získávat hodnoty ze sloupců příslušného řádku. Princip bude stejný i pro jiné databáze, ale tak jak to máte udělané budete muset měnit kód. Pokud byste použil pro přístup OLE DB nebo ODBC, pak by stačilo pro změnu databáze změnit jenom connection string v konfiguračním souboru.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

> Každý DataRow má kolekci Item, přes kterou lze získávat hodnoty

> ze sloupců příslušného řádku.

Díky za radu. Tohle by mohlo být to, co hledám. Vyzkouším a dám vědět.

Nerozumím té druhé části. Připojení mám uděláno přes Data connection wizard ve VS, ale connection string si přece mohu načíst z ext. souboru a v tom vygenerovaném table adaptéru změnit, ne?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tady jde o to, že používáte objekty pro přístup ke konkrétní databázi MySQL, kdybyste použil obecné OLE DB nebo ODBC pro přístup k libovolné databázi, nebudete muset vůbec šáhnout do kódu při nutnosti změny databáze, pouze do textového konfiguračního souboru. MySQL myslím ovladače pro ODBC má, vy používáte jeho .NET providera.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jo takhle. Přiznám se, že jsem nad tím takto neuvažoval, ale díky za radu. Opravdu to dává smysl. :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak jsem si to vyzkoušel a funguje to. Udělal jsem to následovně:

Dim test As Object 'nadefinoval jsem si na zkoušku

...
...
...

test = ProgramDataSet.authorize.Rows.Item(0).ItemArray
'tímhle jsem dostal obsah řádku tabulky do pole

Jestli jsem to pochopil správně tak Item(0) znamená řádek č. 1. Další řádek by pak byl Item(1), Item(2), ...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Proč ItemArray?! Použijte Item a budete se moct na sloupec odkazovat i pomocí jeho názvu (což je lepší), nejen indexu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Už jsem na to přišel. Myslíte asi nějak takto?


tst = ProgramDataSet.authorize.Rows.Item(0).Item("ID")

Díky za tip. Já bych se asi spokojil i s tím ItemArray.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback