Mehrere Mysql Befehle

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    Mehrere Mysql Befehle

    Hallo ich hab ein Problem und zwa möchte ich mehre SQL Befehle übermiteln mein Code sieht nun so aus:

    VB.NET-Quellcode

    1. MySqlConnection = New MySqlConnection()
    2. MySqlConnection.ConnectionString = "server=technopower.fm; user id=technoadmin; password=techno4ever; database=test;"
    3. Try
    4. MySqlConnection.Open()
    5. Dim myadapter As New MySqlDataAdapter
    6. Dim sqlquary2 = "SELECT * FROM Funkspiele_users WHERE username = '" & UsernameTextBox.Text & "' AND password = '" & PasswordTextBox.Text & "';"
    7. Dim sqlquary = "UPDATE Funkspiele_users SET status = 'Online' WHERE username = '" & UsernameTextBox.Text & "';"
    8. Dim command As New MySqlCommand
    9. command.Connection = MySqlConnection
    10. command.CommandText = sqlquary
    11. command.CommandText = sqlquary2
    12. myadapter.SelectCommand = command
    13. mydata = command.ExecuteReader()
    14. If mydata.HasRows = 0 Then
    15. MsgBox("Benutzername oder Passwort Falsch!", MsgBoxStyle.Information)
    16. Else

    das sqlquary2 macht er aber das sqlqueary nicht also den benutzer auf Online updaten weis jemand woran das liegen kann?
    Zwei Dinge:
    1. jeder SQL-String muss einzeln ausgelöst werden.
    2. Für den Update-Befehl darf man nicht mit dem ExcecuteReader-Befehl arbeiten. Man will ja nicht Lesen oder? Es wird der EcexuteNonQuery-Befehl benötigt.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).

    INOPIAE schrieb:

    1. jeder SQL-String muss einzeln ausgelöst werden.

    Da hängt von der DB ab. Jeder "richtige" SQL Server kann auch mehrere Kommandos in einem String verarbeiten. Einfach mit ";" trennen:

    SQL-Abfrage

    1. INSERT INTO tabelle (Feld1) VALUES (Wert1); UPDATE tabelle2 SET Feld1=Wert1;


    Geht auch mit dem Commandobjekt und auch wenn's parametrisiert ist.

    Der Fehler in diesem Fall ist recht einfach:
    cmd.text = "A"
    cmd.text = "B"

    ergo cmd.text = "B" !

    theoretisch ginge: cmd.text = "A" & ";" & "B"
    aber nicht sinnvoll, wenn einer davon was zurückliefern soll (wie SELECT). Wobei ich noch nie ausprobiert habe, was passiert wenn man zb UPDATE bla; SELECT bla; macht und dann ExecuteReader ausführt. Könnte sogar klappen ;)
    also ich hab das jetzt so geändert

    VB.NET-Quellcode

    1. MySqlConnection.Open()
    2. Dim myadapter As New MySqlDataAdapter
    3. Dim sqlquary2 = "SELECT * FROM Funkspiele_users WHERE username = '" & UsernameTextBox.Text & "' AND password = '" & PasswordTextBox.Text & "';"
    4. Dim sqlquary = "UPDATE Funkspiele_users SET status = 'Online' WHERE username = '" & UsernameTextBox.Text & "';"
    5. Dim command As New MySqlCommand
    6. command.Connection = MySqlConnection
    7. command.CommandText = sqlquary2
    8. myadapter.SelectCommand = command
    9. mydata = command.ExecuteReader()
    10. If mydata.HasRows = 0 Then
    11. MsgBox("Benutzername oder Passwort Falsch!", MsgBoxStyle.Information)
    12. Else
    13. fms.Show()
    14. Me.Hide()
    15. My.Settings.Username = UsernameTextBox.Text
    16. My.Settings.passwort = PasswordTextBox.Text
    17. command.CommandText = sqlquary
    18. myadapter.SelectCommand = command
    19. mydata = command.ExecuteNonQuery
    20. MySqlConnection.Close()
    21. mydata.Close()
    22. End If


    allerdings gibt er mir bei mydata = command.ExecuteNonQuery diesen Fehler Wieder

    Quellcode

    1. Fehler 2 Der Wert vom Typ "Integer" kann nicht in "MySql.Data.MySqlClient.MySqlDataReader" konvertiert werden. C:\Funkspiele-Celle\Funkspiele-Celle\LoginForm2.vb 28 26 Funkspiele-Celle
    ExecuteNonquery gibt als Integer die Anzahl der betroffenen Datensätze zurück. Das ist KEIN DataReader.
    Also entweder:
    i = cmd.ExecutenonQuery
    oder, falls es einen nicht interessiert, wieviel Datensätze b etroffen waren einfach nur:
    cmd.ExecuteNonquery