[英]How to Handle SQL Exception Must Pass Parameter number 'x'?
我正在尝试通过使用存储过程来存储二进制数据。 存储过程具有三个参数。 最后一个参数将包含二进制数据。 但是,当我运行代码时,它会给出SQL异常
必须传递参数编号3和后续参数作为“ @name = value”。 使用'@name = value'形式后,所有后续参数都必须以'@name = value'形式传递。
SqlCommand cmd = new SqlCommand("EXEC myProc @param1 = 8, @param2= '5.png', @FileSignature");
using (SqlConnection conn = new SqlConnection(myConnString))
{
cmd.Connection = conn;
if (FileSignature == null) //FileSignature is byte[]
{
cmd.Parameters.Add("@FileSignature", SqlDbType.VarBinary, -1);
cmd.Parameters["@FileSignature"].Value = System.DBNull.Value;
}
else
cmd.Parameters.AddWithValue("@FileSignature", FileSignature); //FileSignature is byte[]
int iReturn = cmd.ExecuteNonQuery();
}
因为您按名称提供了前两个参数,所以必须为所有这三个参数都提供。 因此,您需要更新SqlCommand文本以使其包含SqlCommand cmd = new SqlCommand("EXEC myProc @param1 = 8, @param2= '5.png', **@Parameter3** = @FileSignature");
将@ Parameter3替换为Stored Proc中的名称,也可以使用可选的名称(只要参数在过程中的顺序相同)就不能传递任何名称。
SqlCommand cmd = new SqlCommand("EXEC myProc 8, '5.png', @FileSignature");
您不能将@param=val
用于某些参数,将@param
用于其他参数。 另外,这也不是使用sqlCommand
执行存储过程的正确方法。
请尝试阅读异常消息。 这是简单的英语,可以为您提供帮助。
尝试这个:
using(SqlConnection conn = new SqlConnection(myConnString),
SqlCommand cmd = new SqlCommand("myProc", conn)
{
cmd.CommandType = SqlCommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@param1", 8);
cmd.Parameters.AddWithValue("@param2", '5.png');
if (FileSignature == null) //FileSignature is byte[]
{
cmd.Parameters.Add("@FileSignature", SqlDbType.VarBinary, -1);
cmd.Parameters["@FileSignature"].Value = System.DBNull.Value;
}
else
{
cmd.Parameters.AddWithValue("@FileSignature", FileSignature); //FileSignature is byte[]
}
conn.Open();
int iReturn = cmd.ExecuteNonQuery();
conn.Close();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.