2016-08-04 12 views
0

Ich habe die folgende gespeicherte Prozedur:VB.NET Prozedur oder Funktion hat zu viele Argumente angegeben

CREATE PROCEDURE MyProc  
@posted_xml_body xml  
AS  
INSERT INTO MyTable  
(post_datetime, post_body)  
VALUES  
(getdate(), @posted_xml_body) 

und die folgenden VB-Code:

Using aConnection As New Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings(connectionString).ConnectionString) 
    aConnection.Open() 
    Dim aCommand As New Data.SqlClient.SqlCommand("MyProc", aConnection)  
    aCommand.CommandType = Data.CommandType.StoredProcedure 
    aCommand.Parameters.AddWithValue("@posted_xml_body", aXMLString) 

    Dim rows_affected As Integer = aCommand.ExecuteNonQuery() 

    aCommand.Dispose() 
    aConnection.Close() 

    Return rows_affected 

End Using 

Allerdings halte ich die Aufnahme des folgenden Fehler

„Prozedur oder Funktion hat zu viele Argumente angegeben.“

Vielen Dank für alle Vorschläge.

+0

Wo ist die letzte Klammer in Stored Proc (nach GetDate(), XML_Body)? –

+0

Sorry, ich habe vergessen, es in meine Frage aufzunehmen, aber es ist da. WERTE (getdate(), @posted_xml_body) – mike

+0

Here I .ExecuteScalar nutzen einen Rückgabewert zu bekommen .... ich kein anderes Problem in Ihrem Verfahren sehen. –

Antwort

0

Sie falsch geklebt oder fehlt ein ")" hier

VALUES  
(getdate(), @posted_xml_body) 
0

Es gibt einige Dinge, die ich vorschlagen würde.

Ändern Sie den Spaltentyp auf nvarchar (max), wählen Sie die Bereichsidentität aus, stellen Sie sicher, dass Ihre Tabelle als Primärschlüssel verwendet wird, da Sie mit vb-Code eine Ausnahme versuchen, das Datum in Ganzzahl zu konvertieren.

CREATE PROCEDURE MyProc  
@posted_xml_body as nvarchar(max)  
AS 
Begin 
INSERT INTO MyTable  
(post_datetime, post_body)  
VALUES  
(getdate(), @posted_xml_body);SELECT SCOPE_IDENTITY() 
END 

Ihre Vb-Code

Using aConnection As New Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings(connectionString).ConnectionString) 

    Dim rows_affected As Integer = 0 

    Try 
     aConnection.Open() 

     Dim aCommand As New Data.SqlClient.SqlCommand("MyProc", aConnection) 

     aCommand.CommandType = Data.CommandType.StoredProcedure 
     aCommand.Parameters.AddWithValue("@posted_xml_body", aXMLString) 
     rows_affected = aCommand.ExecuteScalar() 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    Finally 
     If aConnection.State = ConnectionState.Open Then 
      aConnection.Close() 
     End If 
    End Try 

    Return rows_affected 

End Using