Announcement

Collapse
No announcement yet.

ADO.NET 1.1 Stored Procuedur aufrufen Parameter Typ datetime NULL übergeben?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ADO.NET 1.1 Stored Procuedur aufrufen Parameter Typ datetime NULL übergeben?

    Hallo!

    .NET 1.1

    Ich schreibe eine Datenimport Routine die ein DTS-Paket im SQL Server 2000
    ablösen soll. Das DTS-Paket (mit DTS kenn ich mich kaum aus) importiert
    Datensätze aus einem Excel-Sheet mit einer Stored Procedure in eine Datenbank.
    In dem Excel-Sheet gibt es Datumsspalten, deren Wert "leer" sein kann. In
    den Bindings der Data Driven Task Properties sind dies Felder als Nullable
    gekennzeichnet.

    Meine Frage: Wie kann ich aus C# einem SP-Parameter von Typ datetime NULL
    übergeben? DateTime ist ja wohl ein Value-Typ und unter 1.1 nicht nullable.

    Code:
    public int ImportLE(DateTime listDate,DateTime accreditationBeginDate, ...
    							
    ...
    
    SqlCommand sqlCommand = new SqlCommand(SP, this.connection);
    sqlCommand.CommandType = CommandType.StoredProcedure;
    
    ...
    
    SqlParameter paramAccreditationBeginDate = new 
    SqlParameter("@datAccreditationBeginDate", SqlDbType.DateTime);
    paramAccreditationBeginDate.Direction = ParameterDirection.Input;
    paramAccreditationBeginDate.Value = accreditationBeginDate;
    sqlCommand.Parameters.Add(paramAccreditationBeginDate);
    ---------------------------------------------

    Code:
    CREATE             procedure [dbo].[ap_organisational_unit_ins] 
    	@datListDate			datetime,
    	@datAccreditationBeginDate	datetime,
    Vielen Dank für sachdienliche Hinweise,

    Hans

  • #2
    Hallo,

    für dieses Problem gibt es mit den Bordmitteln des .NET Framework 1.x verschiedene Lösungswege. Das ursächliche Problem liegt darin, dass eine SQL-Datenbank mit dem Zustand NULL eine Besonderheit darstellt. Angenommen, die Stored Procedure verwendet einen DATETIME-Parameter, dessen Default-Zustand NULL ist. In diesem Fall kann die gespeicherte Prozedur entweder mit einem oder beiden Parametern aufgerufen werden:

    <div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"><p style="margin: 0px;"><span style="color: blue;">USE </span>tempdb</p><p style="margin: 0px;">GO</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: blue;">CREATE TABLE </span>TestTbl</p><p style="margin: 0px;">(</p><p style="margin: 0px;">&nbsp; testtbl_id <span style="color: blue;">INT </span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <span style="color: blue;">NOT NULL IDENTITY PRIMARY KEY</span>,</p><p style="margin: 0px;">&nbsp; wert&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <span style="color: blue;">VARCHAR</span>(9) <span style="color: blue;">NULL</span>,</p><p style="margin: 0px;">&nbsp; datum&nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">DATETIME </span>&nbsp; <span style="color: blue;">NULL</span></p><p style="margin: 0px;">)</p><p style="margin: 0px;">GO</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: blue;">CREATE PROCEDURE </span>spTestTblInsert</p><p style="margin: 0px;">(</p><p style="margin: 0px;">&nbsp; @wert&nbsp; <span style="color: blue;">VARCHAR</span>(9),</p><p style="margin: 0px;">&nbsp; @datum <span style="color: blue;">DATETIME </span>= <span style="color: blue;">NULL</span></p><p style="margin: 0px;">)</p><p style="margin: 0px;"><span style="color: blue;">AS</span></p><p style="margin: 0px;">&nbsp; <span style="color: blue;">SET NOCOUNT ON</span>;</p><p style="margin: 0px;">&nbsp; <span style="color: blue;">INSERT INTO </span>dbo.TestTbl </p><p style="margin: 0px;">&nbsp;&nbsp; (wert,datum)</p><p style="margin: 0px;">&nbsp; <span style="color: blue;">VALUES</span></p><p style="margin: 0px;">&nbsp;&nbsp; (@wert,@datum);</p><p style="margin: 0px;"><span style="color: blue;">RETURN </span>@@ROWCOUNT</p><p style="margin: 0px;">GO</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: green;">-- SP mit allen Parametern testen</span></p><p style="margin: 0px;"><span style="color: blue;">DECLARE </span>@i <span style="color: blue;">INT</span>;</p><p style="margin: 0px;"><span style="color: blue;">EXEC </span>@i = spTestTblInsert <span style="color: #a31515;">'Test 1'</span>, <span style="color: #a31515;">'20050226'</span>;</p><p style="margin: 0px;"><span style="color: blue;">PRINT </span>@i</p><p style="margin: 0px;"><span style="color: green;">-- SP übergibt nur den Wert</span></p><p style="margin: 0px;"><span style="color: blue;">DECLARE </span>@i <span style="color: blue;">INT</span>;</p><p style="margin: 0px;"><span style="color: blue;">EXEC </span>@i = spTestTblInsert <span style="color: #a31515;">'Test 2'</span></p><p style="margin: 0px;"><span style="color: blue;">PRINT </span>@i</p></div>

    Wenn die C#-Anwendung beim Aufruf nicht zwei separate SqlCommand-Instanzen (mit jeweils unterschiedlicher Parameters-Anzahl) verwenden soll, ist auch der folgende "Trick" zulässig:

    <div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">private</span> <span style="color: blue;">void</span> button1_Click(<span style="color: blue;">object</span> sender, System.<span style="color: #2b91af;">EventArgs</span> e)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">string</span> sSQL;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">if</span> (textBoxDatum.Text.Length == 8)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sSQL = <span style="color: #2b91af;">String</span>.Format(<span style="color: #a31515;">"EXEC spTestTblInsert '{0}', '{1}'"</span>,</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; textBoxWert.Text, textBoxDatum.Text);</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">else</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sSQL = <span style="color: #2b91af;">String</span>.Format(<span style="color: #a31515;">"EXEC spTestTblInsert '{0}'"</span>, </p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; textBoxWert.Text);</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SqlCommand aCmd = sqlConnection1.CreateCommand();</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aCmd.CommandText = sSQL;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sqlConnection1.Open();</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">try</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aCmd.ExecuteNonQuery();&nbsp;&nbsp;&nbsp; </p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; listBox1.Items.Add(aCmd.CommandText);</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">finally</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sqlConnection1.Close();</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p></div>

    Die Stored Procedure wird über EXEC als Zeichenkette ausgeführt, wobei die Format-Methode der String-Klasse den Datumswert nur dann übergibt, wenn das Datum (im Beispiel im generischen Format YYYYMMDD) bekannt ist.

    Ich schreibe eine Datenimport Routine ...
    Beim Import von vielen Datensätze hat der EXEC-Aufruf über die Zeichenkette noch den Vorteil, dass eine Batch-Anweisung mit vielen Aufrufen (durch ein Semikolon abgetrennt) generiert und dann mit nur einem einzigen Aufruf ausgeführt werden kann.

    Comment


    • #3
      Hallo,

      um nicht einen neuen thread zu eröffnen hänge ich mich hier ran!
      ich programmiere ja auch net 1.1.
      ich hätte gerne gewußt wie ich aus c# eine stored procedure aufrufe.
      am liebsten wäre mir ein codebeispiel wenn die SP keine parameter hat und ein codebeispiel, wenn sie paramter hat!
      Herzliche Grüße

      Markus Lemcke
      barrierefreies Webdesign

      Comment


      • #4
        Hallo Markus,

        am liebsten wäre mir ein codebeispiel ...
        seit der 1. Version von Visual Studio für .NET kann der Aufruf einer Stored Procedure visuell über die Wizards konfiguriert werden. Wenn man sich danach das Ergebnis anschaut, hat man das jeweils passende Quelltext-Beispiel vor Augen ;-)

        Wenn die Produktivität der visuellen Anwendungsentwicklung jedoch aus irgend einen Grund nicht genutzt werden soll, könnte ein von Hand geschriebenes Beispiel so aussehen:

        A) Tabelle und Stored Procedure

        <div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"><p style="margin: 0px;"><span style="color: blue;">USE </span>tempdb</p><p style="margin: 0px;">GO</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: blue;">CREATE TABLE </span>SPDemo</p><p style="margin: 0px;">(</p><p style="margin: 0px;">&nbsp; spdemo_id <span style="color: blue;">INT </span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <span style="color: blue;">NOT NULL IDENTITY PRIMARY KEY</span>,</p><p style="margin: 0px;">&nbsp; wert&nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">VARCHAR</span>(9) <span style="color: blue;">NOT NULL</span>,</p><p style="margin: 0px;">&nbsp; datum&nbsp;&nbsp;&nbsp; <span style="color: blue;">DATETIME </span>&nbsp; <span style="color: blue;">NOT NULL</span></p><p style="margin: 0px;">)</p><p style="margin: 0px;">GO</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: blue;">CREATE PROCEDURE </span>spSPDemoInsert</p><p style="margin: 0px;">(</p><p style="margin: 0px;">&nbsp; @wert&nbsp; <span style="color: blue;">VARCHAR</span>(9),</p><p style="margin: 0px;">&nbsp; @datum <span style="color: blue;">DATETIME</span>,</p><p style="margin: 0px;">&nbsp; @newid <span style="color: blue;">INT </span>&nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">OUTPUT</span></p><p style="margin: 0px;">)</p><p style="margin: 0px;"><span style="color: blue;">AS</span></p><p style="margin: 0px;">&nbsp; <span style="color: blue;">SET NOCOUNT ON</span>;</p><p style="margin: 0px;">&nbsp; <span style="color: blue;">INSERT INTO </span>dbo.SPDemo(wert,datum) <span style="color: blue;">VALUES </span>(@wert,@datum);</p><p style="margin: 0px;">&nbsp; <span style="color: blue;">SET </span>@newid = SCOPE_IDENTITY();</p><p style="margin: 0px;"><span style="color: blue;">RETURN </span>@@ROWCOUNT;</p><p style="margin: 0px;">GO</p></div>

        B) Aufruf der Stored Procedure

        Der Stored Procedure wird ein INPUT-Parameter mit dem Namen @wert vom Typ VARCHAR(9) zugeordnet, der beim Aufruf der Stored Procedure als VALUES-Parameter für die INSERT-Anweisung verwendet wird. Alle Parameter, die nicht gekennzeichnet werden, betrachtet der MS SQL Server generell als INPUT-Parameter. Soll die Stored Procedure jedoch einen Wert über einen Parameter an den Aufrufer zurückliefern, muss dieser über OUTPUP gekennzeichnet werden. Die RETURN-Anweisung legt fest, welcher Wert als Rückgabewert an den Aufrufer zurückgeliefert werden soll.

        Der MS SQL Server unterstützt Stored Procedure, die keine Daten (Output-Parmaeter, Rückgabewert oder Ergebnismenge) zurück, die OUTPUT-Parameter zurückliefer oder die eine Ergebnismenge zurückliefern (wobei auch eine Kombination davon unterstützt wird). Diese verschiedenen Optionen müssen daher auch vom SqlCommand-Objekt von ADO.NET berücksichtigt werden, indem spezielle Eigenschaften konfiguriert werden:
        • aCmd.CommandType = CommandType.StoredProcedure
        • aCmd.UpdatedRowSource = UpdateRowSource.None (alle Output-Parameter oder zurückgelieferten Datensätze ignorieren)
        • aParam.Direction = ParameterDirection.Input (Optional, Input ist Vorgabewert)


        Jeder Parameter einer Stored Procedure wird in Form einer Instanz des SqlParameter-Objekts übergeben, die jedoch nicht über den Konstruktur new angefordert wird. Statt dessen legt die Methode Add der Parameters-Kollektion des SqlCommand-Objekts einen Parameter an, wobei den Namen und den Datentyp die Add-Parameter festlegen.

        <div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">private</span> <span style="color: blue;">void</span> Test()</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">// Namespace über using System.Data.SqlClient; einbinden</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">using</span> (SqlConnection aCon = <span style="color: blue;">new</span> SqlConnection(Properties.Settings.Default.CStempdb ))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aCon.Open();</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">using</span> (SqlCommand aCmd = <span style="color: blue;">new</span> SqlCommand())</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aCmd.Connection = aCon;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aCmd.CommandType = CommandType.StoredProcedure;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aCmd.CommandText = <span style="color: #a31515;">"spSPDemoInsert"</span>;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">// 1. Parametereintrag ist immer der Rückgabewerte @RETURN_VALUE</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aCmd.Parameters.Add(<span style="color: #a31515;">"@RETURN_VALUE"</span>, SqlDbType.Int).Direction = ParameterDirection.ReturnValue;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">// Input-Parameter</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aCmd.Parameters.Add(<span style="color: #a31515;">"@wert"</span>, SqlDbType.VarChar, 9).Value = textBox1.Text;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aCmd.Parameters.Add(<span style="color: #a31515;">"@datum"</span>, SqlDbType.DateTime).Value = <span style="color: #2b91af;">DateTime</span>.Now;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">// Output-Parameter</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aCmd.Parameters.Add(<span style="color: #a31515;">"@newid"</span>, SqlDbType.Int).Direction = ParameterDirection.Output;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">// Stored Procedure ausführen</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">int</span> i = aCmd.ExecuteNonQuery();</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">// Rückgabewert auslesen</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">int</span> iRet = (<span style="color: blue;">int</span>)aCmd.Parameters[<span style="color: #a31515;">"@RETURN_VALUE"</span>].Value;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">// OUTPUT-Parameter auslesen</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">int</span> iNewID = (<span style="color: blue;">int</span>)aCmd.Parameters[<span style="color: #a31515;">"@newid"</span>].Value;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; label2.Text = iRet.ToString();</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; label3.Text = iNewID.ToString();</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p></div>

        ..wenn die SP keine parameter hat ..
        Diesen Fall gibt es nicht, da der Rückgabewert der gespeicherten Prozedur über den 1. Parameter @RETURN_VALUE zurückgeliefert wird. Solange der Aufrufer den Rückgabewert nicht völlig ignoriert, besteht die Parameters-Kollektion daher immer aus mindestens einem Eintrag.

        Comment

        Working...
        X