【问题标题】:How to store multiple rows in single button click using stored procedure如何使用存储过程在单击一次按钮中存储多行
【发布时间】:2013-09-18 11:45:23
【问题描述】:

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

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();
}

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

过程或函数指定的参数过多

这个错误的原因是什么?

【问题讨论】:

    标签: c# asp.net sql sql-server stored-procedures


    【解决方案1】:

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

    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");
    }
    

    【讨论】:

    • hai james 它起作用了。谢谢。还有一个疑问,它以随机顺序存储在表中的位置。它不像往常一样一一插入
    【解决方案2】:

    您可以使用Table valued parameter 从 sql server 2008 开始。

    如果使用 SQL Server 2008 之前的版本,您可以选择 passing data as XML

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 2011-11-15
      相关资源
      最近更新 更多