如何使用存储过程在单击按钮中存储多行
本文关键字:存储 按钮 单击 何使用 存储过程 | 更新日期: 2023-09-27 18:31:51
在数据库中,我创建了一个存储过程
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();
}
当我尝试添加值时,它显示一个错误:
过程或函数指定的参数过多
此错误的原因是什么?
您需要在下一次迭代之前清除参数,即
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");
}
您可以从 SQL Server 2008 开始使用表值参数。
或
如果使用 SQL Server 2008 之前的版本,则可以将数据作为 XML 传递。
或
不是一个很好的分配,但您也可以使用分隔符分隔字符串。