繁体   English   中英

如何处理必须通过参数编号“ x”的SQL异常?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM