SQL Print-Befehl in VB verwenden

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Gelöschter Benutzer.

    SQL Print-Befehl in VB verwenden

    Hallo,

    sitze gerade vor folgendem Probelm:

    Ich habe ein VB-Programm, welches Zugriff auf eine Datenbank hat. Das Programm soll einen SQL-Befehl ausführen und je nach dem welches Ergebnis kommt weiter fortfahren.

    Mein momentaner Code:

    VB.NET-Quellcode

    1. Dim con As New SqlClient.SqlConnection(data.connectionstring) 'Mein ConnectionString zur Datenbank
    2. Dim com As New SqlClient.SqlCommand("if (Select Verfügbar from Schluessel where Schluessel = @schluessel and (Mail = @mail or Mail = '')) > 0 begin Update Schluessel set Verfügbar = Verfügbar - 1 where Schluessel = @schluessel Print 'Success' end else Print 'Failed'", con) 'SQL Befehl und Verknüpfung zur connection
    3. com.Parameters.AddWithValue("@schluessel", mtb_Schluessel.Text)
    4. com.Parameters.AddWithValue("@mail", tb_Mail.Text)
    5. con.Open()
    6. com.ExecuteNonQuery()
    7. con.Close()

    Der ein oder andere wird sich nun wahrscheinlich schon denken können, woran ich scheitere.

    Mein Problem: ich möchte die PRINT-Nachricht vom Server in VB weiter nutzen.
    Bisher habe ich allerdings nur die Möglichkeit gefunden, die Nachricht in einer neuen Sub zu empfangen, weiß aber nicht wie ich die Nachricht in die Sub mit dem Aufruf erhalte.

    Wisst ihr vielleicht eine Möglichkeit oder könnt mir sagen wie ich diese zusätzliche Sub nutzen kann?

    EDIT: SQL-Befehl nochmal übersichtlich:

    SQL-Abfrage

    1. if (Select Verfügbar from Schluessel where Schluessel = @schluessel and (Mail = @mail or Mail = '')) > 0
    2. begin
    3. Update Schluessel set Verfügbar = Verfügbar - 1 where Schluessel = @schluessel
    4. Print 'Success'
    5. end
    6. else
    7. Print 'Failed'
    Habe inzwischen auch eine Lösung gefunden:

    Code in der Sub:

    VB.NET-Quellcode

    1. Dim con As New SqlConnection(data.connectionstring)
    2. Dim com As New SqlCommand("if (Select Verfügbar from Schluessel where Schluessel = @schluessel and (Mail = @mail or Mail = '')) > 0 begin Update Schluessel set Verfügbar = Verfügbar - 1 where Schluessel = @schluessel Print 'Success' end else Print 'Failed'", con)
    3. Dim delay As Integer = 0
    4. com.Parameters.AddWithValue("@schluessel", mtb_Schluessel.Text)
    5. com.Parameters.AddWithValue("@mail", tb_Mail.Text)
    6. AddHandler con.InfoMessage, New SqlInfoMessageEventHandler(AddressOf OnInfoMessage)
    7. con.Open()
    8. com.ExecuteScalar()
    9. con.Close()
    10. 'Auf Rückgabewert warten
    11. Do
    12. Task.Delay(100)
    13. delay = delay + 1
    14. Loop Until sqlresponse <> "" Or delay > 10 'Wenn kein Rückgabewert kommt, dann abbrechen...
    15. Select Case sqlresponse
    16. Case "Failed"
    17. 'Rückgabewert = Failed
    18. Case "Success"
    19. 'Rückgabewert = Success
    20. Case Else
    21. 'Unbekannter oder kein Rückgabewert
    22. End Select
    23. sqlresponse = ""


    Neue Sub, die InfoMessages entgegennimmt:

    VB.NET-Quellcode

    1. Private Sub OnInfoMessage(ByVal sender As Object, ByVal e As SqlInfoMessageEventArgs)
    2. sqlresponse = e.Message
    3. End Sub


    Nicht vergessen sqlresponse als String deklarieren (Standardwert = "")

    Noch ein Hinweis am Rande: habe System.Data.SqlClient importiert, sodass ich mir ein wenig Code sparen kann.

    Hoffe ich konnte meine Lösung für andere, die das selbe Problem haben, verständlich machen...