过程或函数sp_Record指定了太多参数

时间:2014-03-12 12:40:13

标签: c# sql-server ado.net

这是我用来将记录插入SQL SERVER DB

的代码
while (dr.Read())
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "sp_InsertEmailRecord";
    cmd.Connection = con;
    cmd.Parameters.AddWithValue("@mId", memberId);
    cmd.Parameters.AddWithValue("@companyName", dr.GetValue(0));

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

第一个记录插入成功,但当它运行第二个时它返回错误

Procedure or function sp_Record has too many arguments specified

参数加起来

表示第一次插入参数= 2&在接下来又增加了2个......

如何解决???

2 个答案:

答案 0 :(得分:4)

因为您的SqlCommand已经定义了@mId@companyName参数,因为您没有清除参数。

您有2个选项;

  • 使用cmd.Parameters.Clear()清除while语句末尾的参数。
  • 或者创建一个新的SqlCommand对象顶部 while语句,如SqlCommand cmd = new SqlCommand()

最正确的方法是在您之前定义@companyName参数名称,并在像John Saunders mentioned这样的while语句中添加它的值。

还可以使用using statement来处理您的SqlDataReader;

using (SqlDataReader dr = cmd.ExecuteReader())
{
    if (dr != null)
    {
        while (dr.Read())
        {
            //do something
        }
    }
}

答案 1 :(得分:3)

cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_InsertEmailRecord";
cmd.Connection = con;
cmd.Parameters.AddWithValue("@mId", memberId);
cmd.Parameters.Add("@companyName");
con.Open();

while (dr.Read())
{
    cmd.Parameters["@companyName"].Value = dr.GetValue(0);
    cmd.ExecuteNonQuery();
}

con.Close();