2017-03-24 6 views
1

Ich brauche eine Plausibilitätsprüfung hier .... Ich habe eine sehr einfache ExecuteNonQuery. Ich übergebe Werte an einen Sproc, aber es gibt immer wieder einen Fehler, dass der erste Wert nicht einmal übergeben wurde.Parameter, der nicht an SQL übergeben wird Prozedur

using (SqlConnection sqlConnection = new SqlConnection(ConnectionString)) 
       { 
        sqlConnection.Open(); 
        using (SqlCommand sqlCommandLogError = new SqlCommand("MyStoredProc", sqlConnection)) 
        { 
         sqlCommandLogError.Parameters.AddWithValue("logEntry", logEntry); 
         sqlCommandLogError.Parameters.AddWithValue("EventLogEntryType", EventLogEntryType); 
         sqlCommandLogError.Parameters.AddWithValue("EventID", eventId); 
         sqlCommandLogError.ExecuteNonQuery(); 

       } 
      } 

ich festgestellt, dass Parameter in dem Verfahren existieren ich sie in dem Verfahren auf Null gesetzt, um sicherzustellen, dass die Felder in der sproc tatsächlich korrekt waren und es funktionierte (es ausdrückte alle NULL-Werte in der Datenbank)

Irgendeine Idee, warum das Verfahren denkt, dass keine Parameter übergeben werden?

AKTUALISIERT Frage Eventhough dies antwortet ich von einigen der Experten aus ihr hören würde gerne: Ist der @symbol in einem Parameter erforderlich (es scheint nicht) und warum es meine sproc sogar in einem ohne setzen Befehlstyp.

+2

Sie benötigen die Commandtype-Eigenschaft des SqlCommand zu StoredProcedure einzustellen. –

Antwort

1

Bitte versuchen Sie es. Fügen Sie außerdem @ zu Schlüsselnamen hinzu.

using (SqlConnection sqlConnection = new SqlConnection(ConnectionString)) 
{ 
    sqlConnection.Open(); 
    using (SqlCommand sqlCommandLogError = new SqlCommand("MyStoredProc", 
      sqlConnection)) 
    { 
     sqlCommandLogError.CommandType = CommandType.StoredProcedure; 

     sqlCommandLogError.Parameters.AddWithValue("@logEntry", logEntry); 
     sqlCommandLogError.Parameters.AddWithValue("@EventLogEntryType", 
               EventLogEntryType); 
     sqlCommandLogError.Parameters.AddWithValue("@EventID", eventId); 

     sqlCommandLogError.ExecuteNonQuery(); 
    } 
} 
+0

eigentlich habe ich das @ rausgehalten. Es ist nicht notwendig. Ich habe vergessen, den Befehlstyp zu sehen :(. Was ist seltsam ist, dass die Nachricht mir sagte, dass ich einen Parameter fehlte, aber in der Tat fehlte ich den BefehlType. Ich hätte erwartet, dass es nicht sogar die Sproc hatte ich hatte keine richtige commandType – logixologist

0

Es ist schwer, die genaue Antwort zu finden, da der Quellcode für die gespeicherte SQL Server-Prozedur "MyStoredProc" nicht angehängt ist. Basierend auf den verfügbaren Informationen sollte den Parameternamen für gespeicherte Prozeduren ein "@" -Zeichen vorangestellt werden.

0

Sie sollten Parameternamen mit @ und SQLType und wie diese passieren:

using (SqlConnection sqlConnection = new SqlConnection(ConnectionString)) 
      { 
       sqlConnection.Open(); 
       using (SqlCommand sqlCommandLogError = new SqlCommand("MyStoredProc", sqlConnection)) 
       { 
        sqlCommandLogError.Parameters.Add(new SqlParameter("@logEntry", SqlDbType.YourParamType) {Value = logEntry}); 
        sqlCommandLogError.Parameters.Add(new SqlParameter("@EventLogEntryType", SqlDbType.YourParamType) {Value = EventLogEntryType}); 
        sqlCommandLogError.Parameters.Add(new SqlParameter("@EventID", SqlDbType.YourParamType) {Value = eventId}); 

        sqlCommandLogError.ExecuteNonQuery(); 

      } 
     } 
+0

Ich werde nicht abstimmen, aber Sie vermissen, was wirklich falsch ist.Der Grund für meinen Fehler war, dass ich die CommandType-Deklaration fehlte. – logixologist

Verwandte Themen