Reputation: 98
I am trying to insert GridView data to a table by invoking a stored procedure. The code is working just fine when the GridView have a single row, but how ever I am getting an error when it has more than one row. The error is bizarre enough,
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.");
}
}
Thanks, cheers!
Upvotes: 0
Views: 90
Reputation: 2221
You keep adding parameters to same cmd
object in foreach
.
I'd declare the params outside of the loop as follows
cmd.Parameters.Add("@OrderID", SqlDbType.Int);
cmd.Parameters.Add("@ItemID", SqlDbType.Int);
and then in foreach, do
cmd.Parameters["@OrderID"].Value = lblOrderID.Text;
cmd.Parameters["@ItemID"].Value = row.Cells[1].Text;
Upvotes: 0
Reputation: 35790
Clear parameters:
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;
Upvotes: 1