2016-07-29 8 views
0

Die gespeicherte Prozedur wird ordnungsgemäß ausgeführt, wenn sie in SQL Server Management Studio ausgeführt wird.Gespeicherte Prozedur mit nicht angegebenen Werten, obwohl der Wert übergeben wurde

In C# (WinForms) Ich habe den folgenden Code:

InsertWarning.Parameters.AddWithValue("@idUser", userIDAuth); 
InsertWarning.Parameters.AddWithValue("@idPass", idPass); 

if (Privileged) 
    MessageWarning += " gave you privileged access to note " + Description; 
else 
    MessageWarning += " gave you access to note " + Description; 

InsertWarning.Parameters.AddWithValue("@Message", MessageWarning); 
InsertWarning.ExecuteNonQuery(); 
InsertWarning.Parameters.Clear(); 

Wenn ExecuteNonQuery() läuft es aufhört zu sagen die @idUser keinen Wert hat.

idUser being given a value

enter image description here

gespeicherte Prozedur in C#:

SqlCommand InsertWarning = new SqlCommand("_spInsertWarnings", TeamPWSecureBD); 

InsertAuths.CommandType = CommandType.StoredProcedure; 

gespeicherte Prozedur in SQL:

[dbo].[_spInsertWarnings] 
    @idUser int, @idPass int, @Message nvarchar(MAX) 
AS 
    INSERT INTO Warnings 
    VALUES(@idUser, @idPass, @Message) 
+0

Aufgrund der Formatierung des ursprünglichen Posts sieht es so aus, als wäre es Teil eines logischen Zweiges. Gibt es anderswo, dass dieser Prozess aufgerufen wird? Außerdem ist der Datentyp @ @ idUser im gespeicherten Proc. Kannst du auch den Header des Stored Proc hochladen? –

+1

Was zeigt Sql Profiler beim Ausführen der gespeicherten Prozedur? –

+0

// Können Sie die Clear-Methode auf den Zusatz setzen ... Und noch einmal versuchen? InsertWarning.Parameters.Clear(); InsertWarning.Parameters.AddWithValue ("@ idUser", userIDAuth); InsertWarning.Parameters.AddWithValue ("@ idPass", idPass); if (Privilegiert) MessageWarning + = "gab Ihnen bevorzugten Zugriff auf die Notiz" + Beschreibung; sonst MessageWarning + = "gab Ihnen Zugriff auf die Notiz" + Beschreibung; InsertWarning.Parameters.AddWithValue ("@ Message", MessageWarning); InsertWarning.ExecuteNonQuery(); – sarathkumar

Antwort

0

Wenn ich noch einmal darüber nachdenke, bin ich der Meinung, dass ein anderer Parameter als @idUser fehlt und diesem Parameter kein Standardwert zugewiesen ist. Manchmal meldet SQL Server den falschen Namen für einen Parameter, der einen Wert nicht enthält.

Sehen Sie sich Ihren proc-Header an und bestätigen Sie, dass Sie alle erforderlichen Parameter übergeben, die der proc erwartet, oder dass Sie sinnvolle Standardwerte für diejenigen haben, die Sie nicht immer übergeben wollen.

+0

Frage bearbeitet – walkman

+0

Danke! Also frage ich mich jetzt, ob der fehlende Datentyp kein Problem ist. Ich würde versuchen, was @sarathkumar vorschlägt. Stellen Sie sicher, dass Sie auch den Datentyp explizit übergeben. –

+0

Sehen Sie sich das obige Beispiel von @ sarathkumar an: 'InsertWarning.Parameters.Add ('@ idUser', SqlDbType.Int).Value = userIdAuth; ' –

1
using (SqlConnection con = new SqlConnection(dc.Con)) 
{ 
    using (SqlCommand cmd = new SqlCommand("_spInsertwarnings", con)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 

//Please Make SqlDataType as per your Sql ColumnType 
     cmd.Parameters.Add("@idUser", SqlDbType.VarChar).Value = userIDAuth; 
     cmd.Parameters.Add("@idPass", SqlDbType.VarChar).Value = idPass; 


     con.Open(); 
     cmd.ExecuteNonQuery(); 
    } 
    } 
0

Ich denke, das könnte funktionieren, ich habe den Code von wo Sie hinzufügen.

InsertWarning.Parameters.Add("@idUser", SqlDbType.Int); 
    InsertWarning.Parameters["@idUser"].Value = userIDAuth; 
    InsertWarning.Parameters.AddWithValue("@idPass", idPass); 
    try 
    { 
     connection.Open(); 
     InsertWarning.ExecuteNonQuery() 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    }