Stored Procedure auf einem SQL-Server ausführen und Rückgabewert abfragen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Lingo.

    Stored Procedure auf einem SQL-Server ausführen und Rückgabewert abfragen

    Hallo an Alle !
    Das ist meine erste Frage in diesem Forum. Deshalb schnell eine kurze Einleitung.
    Also - ich programmiere seit über 20 Jahren. Damals noch in RGP II und in Cobol. Danach in Clipper und PureBasic.
    Außerdem programmiere ich auch in MS Dynamics NAV.

    Seit einer Woche habe ich dienstlich VB 2010 Express installiert und bin dabei eine Anwendung umzusetzen.
    Leider hänge ich noch an der ein oder anderen Stelle. Das macht mich auch ganz schön nervös - könnte ich die
    umzusetzende Aufgaben in anderen Sprachen doch locker lösen.

    Nun gut - zu meinem Problem.

    Auf einem SQL-Server gibt es eine Datenbank. Darin ist eine Stored Procedure.
    Dieser muss ein Parameter übergeben werden. Und die Procedure gibt auch einen Rückgabewert.

    Die Procedure heißt neuePaketnummer und erwartet den Parameter produkt.

    VB.NET-Quellcode

    1. Cmd = New SqlCommand("EXEC neuePaketnummer " & "@produkt= " & "'" & MyParam & "'", Cn)
    2. Paket_Nr = Cmd.ExecuteScalar.ToString()


    So funktioniert das leider nicht. Was geht denn da schief - kann mir da jemand helfen?

    Noch einen schönen Abend

    JKG
    :)
    Hallo Erfinder :)
    Hier zuerst noch mal der Code, diesmal etwas mehr davon:

    VB.NET-Quellcode

    1. Dim Paket_Nr As String
    2. Dim MyParam As String = "PRODUCT1"
    3. Dim sCn As String = "Server=DBSERVER; Database=PAKETE; Trusted_Connection=True;"
    4. Dim Cn As New SqlConnection(sCn)
    5. Try
    6. Cn.Open()
    7. Cmd = New SqlCommand("EXEC neuePaketnummer " & "@produkt= " & "'" & MyParam & "'", Cn)
    8. Paket_Nr = Cmd.ExecuteScalar.ToString()
    9. MessageBox.Show(Paket_Nr)
    10. Cn.Close()
    11. Catch ex As Exception
    12. MessageBox.Show(ex.Message)
    13. End Try

    Die Fehlermeldung lautet wie folgt:

    "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt"


    Noch eine Info:

    Mein Code erreicht die stored procedure nachweislich, denn in der Procedure wird bei jedem Aufruf ein Feld um eins erhöht.
    Ich kann also in der Tabelle auf dem SQL-Server sehen, dass sich dieser Wert verändert - und zwar immer, wenn ich mein Programm ausführe.

    Lediglich der Rückgabewert kommt nicht an!


    Gruß JKG :)
    zum debuggen empfiehlt es sich den "try-catch" block weg zulassen (die diskussion ob die gut oder schlecht sind lassen wir jetzt mal außen vor)
    dann bekommst du nähere infos und sogar eine zeilen angabe wo der fehler auftritt
    Noch eine Empfehlung: Option Strict On

    Cmd ist bei dir nicht definiert.

    VB.NET-Quellcode

    1. Dim Cmd = New SqlCommand("EXEC neuePaketnummer " & "@produkt= " & "'" & MyParam & "'", Cn)


    Mein Code erreicht die stored procedure nachweislich
    ?( ?( Das würde mich wundern.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hi,

    soweit ich weiß kann eine Stored Procedure auch gar keinen Wert zurückgeben. Rückgaben müssen bei SPs über Output-Variablen geschehen (erinnert an call-by-reference), z.B.:

    DECLARE @username nvarchar(50);
    EXEC usp_get_username @uid = 1, @username OUTPUT;

    Slimboy