如果在SQL Server Management Studio中执行,则存储过程执行正常。
在C#(Winforms)中,我有以下代码:
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();
当ExecuteNonQuery()
运行时,它会停止说@idUser
没有值。
C#中的存储过程:
SqlCommand InsertWarning = new SqlCommand("_spInsertWarnings", TeamPWSecureBD);
InsertAuths.CommandType = CommandType.StoredProcedure;
SQL中的存储过程:
[dbo].[_spInsertWarnings]
@idUser int, @idPass int, @Message nvarchar(MAX)
AS
INSERT INTO Warnings
VALUES(@idUser, @idPass, @Message)
答案 0 :(得分: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();
}
}
答案 1 :(得分:0)
这篇文章中的问题看起来与你的相似: Stored procedure or function expects parameter which was not supplied
您是否尝试过使用.Parameters.Add(“fieldname”,type,value)?我想知道即使你在调试会话中看到值8,当你进行存储过程调用时它也不会被识别。
答案 2 :(得分:0)
再次考虑这个问题,我的猜测是你错过了与@idUser不同的参数,并且该参数没有分配默认值。有时,SQL Server会为缺少值的参数报告错误的名称。
查看你的proc标题并确认你传递了proc期望的所有必需参数,或者你为那些你并不总是想要传递的参数分配了合理的默认值。
答案 3 :(得分:0)
我想这可能有用,我已经发布了你要添加的代码。
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);
}