0

在数据库中我创建了一个存储过程

ALTER procedure [dbo].[usercusdet_pro](@user varchar(25),@cusname varchar(max))--,@cnt int)
as
begin
    --declare @count int
    --set @count=0
    --if(@count<@cnt)
    insert usercusdet values(@user,@cusname)
end

插入值。当我单击按钮时,应在表中插入多行。

int cnt = gvTranferRows.Rows.Count;
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["gdb"].ConnectionString);

con.Open();

SqlCommand cmd = new SqlCommand("usercusdet_pro", con);
cmd.CommandType = CommandType.StoredProcedure;

if (con.State == ConnectionState.Closed)
    con.Open();

for (int i=0;i<cnt;i++)
{
     cmd.Parameters.Add("@user", SqlDbType.VarChar).Value = "A001";
     cmd.Parameters.AddWithValue("@cusname",gvTranferRows.Rows[i].Cells[0].Text);
     //cmd.Parameters.AddWithValue("@cnt", cnt);
     cmd.ExecuteNonQuery();
}

当我尝试添加值时,它显示错误:

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

这个错误的原因是什么?

4

2 回答 2

0

您需要在下一次迭代之前清除参数,即

cmd.Parameters.Add("@user", SqlDbType.VarChar).Value = "A001";
cmd.Parameters.AddWithValue("@cusname",gvTranferRows.Rows[i].Cells[0].Text);
//cmd.Parameters.AddWithValue("@cnt", cnt);
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();

或者给定@user参数是固定的,你只需要更换@cusname一个

cmd.Parameters.Add("@user", SqlDbType.VarChar).Value = "A001";
for (int i=0;i<cnt;i++)
{
    cmd.Parameters.AddWithValue("@cusname",gvTranferRows.Rows[i].Cells[0].Text);
    cmd.ExecuteNonQuery();
    cmd.Parameters.RemoveAt("@cusname");
}
于 2013-09-18T11:48:49.153 回答
0

从 sql server 2008 开始,您可以使用表值参数。

或者

如果使用 SQL Server 2008 之前的版本,您可以将数据作为 XML 传递。

或者

这不是一个好的方法,但您也可以使用分隔符分隔的字符串。

于 2013-09-18T11:52:57.170 回答