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

Dan*_*ish 0 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();
}
Run Code Online (Sandbox Code Playgroud)

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

Procedure or function sp_Record has too many arguments specified

参数已加

意思是在第一个插入参数= 2 &在接下来它添加了2个......

怎么解决???

Son*_*nül 5

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

你有2个选择;

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

看起来最正确的方法是@companyName在 while 之前定义参数名称,并将其值添加到 while 语句中,就像 John Saunders提到的那样。

还可以使用using声明来处理您的SqlDataReader喜欢;

using (SqlDataReader dr = cmd.ExecuteReader())
{
    if (dr != null)
    {
        while (dr.Read())
        {
            //do something
        }
    }
}
Run Code Online (Sandbox Code Playgroud)