none
StoredProcedure Rückgabe RRS feed

  • Frage

  • Hallo zusammen,

    ich starte mit ExecuteNonQuery eine StoredProcedure

                    SqlCommand scmdSQLSPExec = new SqlCommand("DATA_IMPORT", connDB1);
                    scmdSQLSPExec.CommandType = CommandType.StoredProcedure;
                    scmdSQLSPExec.CommandTimeout = Properties.Settings.Default.intTimeOut;
    
                    scmdSQLSPExec.ExecuteNonQuery();
    wie kann man als Wert die Ausgabe von diese Procedure bekommen. Wenn man diese SP über SQL Management Studio ausführt, dann bekommt man als Text z.B. (50 Zeile(n) betroffen) und Fehler wenn es stattfindet. Ich fänge Fehler mit try-catch in C# ab, nur diese Fehler nicht eindeutig. "System.Data.SqlClient.SqlException: Zeichenfolgen- oder Binärdaten würden abgeschnitten." Wie bekommt man, wo es ist genau und welche SQL Statement aus SP betroffen ist.

    Dienstag, 19. April 2016 07:28

Antworten

  • dann bekommt man als Text z.B. (50 Zeile(n) betroffen)

    Hallo,

    diese Info Message kann man über das SqlConnection.InfoMessage Event abfangen. Den Text müsstest Du aber selber parsen, wen Du den Wert wie 50 erhalten willst; wurde ich nicht machen. Zudem setzt man in eine SP das NOCOUNT auf ON, damit solche unnützen Daten eben nicht kommen.

    Liefere besser über ein

    SELECT @@RowCount AS AnzahlZeilen

    die Anzahl betroffener Datensätze als einen numerischen Wert zurück.

    "System.Data.SqlClient.SqlException: Zeichenfolgen- oder Binärdaten würden abgeschnitten."

    Wenn Du die SP in SSMS aufrufst, erhälst Du in der Fehlermeldung de Zeilennummer der SP, an der der Fehler aufgetreten ist; dito in der Inner Exception in C#


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    • Als Antwort markiert andrej75 Dienstag, 19. April 2016 11:48
    Dienstag, 19. April 2016 07:56

Alle Antworten

  • dann bekommt man als Text z.B. (50 Zeile(n) betroffen)

    Hallo,

    diese Info Message kann man über das SqlConnection.InfoMessage Event abfangen. Den Text müsstest Du aber selber parsen, wen Du den Wert wie 50 erhalten willst; wurde ich nicht machen. Zudem setzt man in eine SP das NOCOUNT auf ON, damit solche unnützen Daten eben nicht kommen.

    Liefere besser über ein

    SELECT @@RowCount AS AnzahlZeilen

    die Anzahl betroffener Datensätze als einen numerischen Wert zurück.

    "System.Data.SqlClient.SqlException: Zeichenfolgen- oder Binärdaten würden abgeschnitten."

    Wenn Du die SP in SSMS aufrufst, erhälst Du in der Fehlermeldung de Zeilennummer der SP, an der der Fehler aufgetreten ist; dito in der Inner Exception in C#


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    • Als Antwort markiert andrej75 Dienstag, 19. April 2016 11:48
    Dienstag, 19. April 2016 07:56
  • Hallo Andrej,

    bzgl. des Rückgabewerts schau mal hier:

      http://stackoverflow.com/questions/6210027/calling-stored-procedure-with-return-value

    Bzgl. der Fehlermeldung solltest Du per catch( SqlException ex ) auch wirklich eine SqlException abfangen und kannst dann bspw. über die LineNumber Eigenschaft die Zeilennummer ermitteln.

      https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception.aspx


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 19. April 2016 08:17
    Moderator