我正在尝试将所有DataGridView
行插入数据库。
这是我的代码:
private void btnSave_Click(object sender, EventArgs e)
{
try
{
using (SqlConnection sqlcon = new SqlConnection(con))
{
sqlcon.Open();
SqlCommand cmd = new SqlCommand("dbo.SaveWorkerSchedulePerDay", sqlcon);
cmd.CommandType = CommandType.StoredProcedure;
for (int i = 0; i < eachDayScheduleDG.Rows.Count; i++)
{
cmd.Parameters.AddWithValue("@day", DateTime.Now.ToString("yyyy-MM-dd"));
cmd.Parameters.AddWithValue("@worker_id", eachDayScheduleDG.Rows[i].Cells[0].Value);
cmd.Parameters.AddWithValue("@timeEnter", Convert.ToDateTime(eachDayScheduleDG.Rows[i].Cells[2].Value));
cmd.Parameters.AddWithValue("@timeExit", Convert.ToDateTime(eachDayScheduleDG.Rows[i].Cells[3].Value));
cmd.Parameters.AddWithValue("@costPerDay", getCostDays(eachDayScheduleDG.Rows[i].Cells[0].Value.ToString(), i));
cmd.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
MessageBox.Show("error: "+ ex);
}
}
我收到以下错误:
过程指定了太多参数。
我知道它正在插入第一行而没有任何错误。
答案 0 :(得分:2)
问题在于,每次for循环迭代时,您都在向命令中添加越来越多的参数。
相反,请像这样重用参数:
// First, create the parameters without values.
cmd.Parameters.Add("@day", SqlDbType.DateTime);
cmd.Parameters.Add("@worker_id", SqlDbType.Int);
cmd.Parameters.Add("@timeEnter", SqlDbType.DateTime);
cmd.Parameters.Add("@timeExit", SqlDbType.DateTime);
cmd.Parameters.Add("@costPerDay", SqlDbType.Decimal);
for (int i = 0; i < eachDayScheduleDG.Rows.Count; i++)
{
// Assign the values to the existing parameters.
cmd.Parameters["@day"].Value = DateTime.Now.ToString("yyyy-MM-dd");
cmd.Parameters["@worker_id"].Value = eachDayScheduleDG.Rows[i].Cells[0].Value);
cmd.Parameters["@timeEnter"].Value = Convert.ToDateTime(eachDayScheduleDG.Rows[i].Cells[2].Value);
cmd.Parameters["@timeExit"].Value = Convert.ToDateTime(eachDayScheduleDG.Rows[i].Cells[3].Value);
cmd.Parameters["@costPerDay"].Value = getCostDays(eachDayScheduleDG.Rows[i].Cells[0].Value.ToString(), i);
cmd.ExecuteNonQuery();
}
请确保使用正确的SqlDbType
常量。
答案 1 :(得分:0)
接受创建命令的两行并将其移至for循环内。这样,您就不必再为同一行的每一行添加更多参数了。