通过调用存储过程插入两个或多个 GridView 行时出错
Error when inserting two or more GridView rows by calling a stored procedure
我正在尝试通过调用存储过程将 GridView 数据插入 table。当 GridView 只有一行时,代码工作得很好,但是当它有多行时,我怎么会收到错误消息。错误够诡异了,
Procedure or function sp_InsertOrderDetail has too many arguments specified.
private void inserOrderDetails()
{
conn = DB_Connect.GetConnection();
if (validatition())
{
SqlCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "[dbo].[sp_InsertOrderDetail]";
foreach (GridViewRow row in grdRequest.Rows)
{
//cmd.Parameters.Add("@OrderID", SqlDbType.Int, 32, "OrderID").Value = row.Cells[0].Text;
cmd.Parameters.Add("@OrderID", SqlDbType.Int, 32, "OrderID").Value = lblOrderID.Text;
cmd.Parameters.Add("@ItemID", SqlDbType.Int, 32, "ItemID").Value = row.Cells[1].Text;
try
{
if (conn.State.ToString() == "Closed")
{
conn.Open();
}
cmd.ExecuteNonQuery();
//WebMsgBox.Show("Sucessfully saved.");
}
catch (Exception ex)
{
WebMsgBox.Show("Saving failed." + ex);
}
conn.Close();
//refresh();
}
}
else
{
WebMsgBox.Show("Please, Fill all data fields before saving.");
}
}
谢谢,干杯!
清除参数:
foreach (GridViewRow row in grdRequest.Rows)
{
cmd.Parameters.Clear();
cmd.Parameters.Add("@OrderID", SqlDbType.Int, 32, "OrderID").Value = lblOrderID.Text;
cmd.Parameters.Add("@ItemID", SqlDbType.Int, 32, "ItemID").Value = row.Cells[1].Text;
您不断向 foreach
中的同一个 cmd
对象添加参数。
我将在循环外声明参数如下
cmd.Parameters.Add("@OrderID", SqlDbType.Int);
cmd.Parameters.Add("@ItemID", SqlDbType.Int);
然后在foreach中,做
cmd.Parameters["@OrderID"].Value = lblOrderID.Text;
cmd.Parameters["@ItemID"].Value = row.Cells[1].Text;
我正在尝试通过调用存储过程将 GridView 数据插入 table。当 GridView 只有一行时,代码工作得很好,但是当它有多行时,我怎么会收到错误消息。错误够诡异了,
Procedure or function sp_InsertOrderDetail has too many arguments specified.
private void inserOrderDetails()
{
conn = DB_Connect.GetConnection();
if (validatition())
{
SqlCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "[dbo].[sp_InsertOrderDetail]";
foreach (GridViewRow row in grdRequest.Rows)
{
//cmd.Parameters.Add("@OrderID", SqlDbType.Int, 32, "OrderID").Value = row.Cells[0].Text;
cmd.Parameters.Add("@OrderID", SqlDbType.Int, 32, "OrderID").Value = lblOrderID.Text;
cmd.Parameters.Add("@ItemID", SqlDbType.Int, 32, "ItemID").Value = row.Cells[1].Text;
try
{
if (conn.State.ToString() == "Closed")
{
conn.Open();
}
cmd.ExecuteNonQuery();
//WebMsgBox.Show("Sucessfully saved.");
}
catch (Exception ex)
{
WebMsgBox.Show("Saving failed." + ex);
}
conn.Close();
//refresh();
}
}
else
{
WebMsgBox.Show("Please, Fill all data fields before saving.");
}
}
谢谢,干杯!
清除参数:
foreach (GridViewRow row in grdRequest.Rows)
{
cmd.Parameters.Clear();
cmd.Parameters.Add("@OrderID", SqlDbType.Int, 32, "OrderID").Value = lblOrderID.Text;
cmd.Parameters.Add("@ItemID", SqlDbType.Int, 32, "ItemID").Value = row.Cells[1].Text;
您不断向 foreach
中的同一个 cmd
对象添加参数。
我将在循环外声明参数如下
cmd.Parameters.Add("@OrderID", SqlDbType.Int);
cmd.Parameters.Add("@ItemID", SqlDbType.Int);
然后在foreach中,做
cmd.Parameters["@OrderID"].Value = lblOrderID.Text;
cmd.Parameters["@ItemID"].Value = row.Cells[1].Text;