我想创建一个for循环,我想编写一个查询来更新数据库中每一行的值。行存在于datagridview和数据库中。目标是在datagridview中进行更改,因此使用按钮时,更改也会应用于数据库表中。在每行中条形码及其数量是不同的。如果在datagridview中的所有行中进行了更改,那么它也将使用按钮应用于数据库中,并且请帮助参数。
这是在for循环中应该考虑的查询:
SqlCommand cmd2 = new SqlCommand("update prod_info set item_quantity=@qty where barcode=@barcode ", con);
将条形码视为column1,将item_quantity视为column2。
到目前为止,为了创建一个for循环,我试过这个但是在for循环中出错:
for (int i = 0; dataGridView2.Rows.Count; i++) //getting error here
{
SqlCommand cmd2 = new SqlCommand("update prod_info set item_quantity=@qty where barcode=@barcode ", con);
cmd2.Parameters.AddWithValue("@barcode", dataGridView2.Rows[i].Cells[1].Value.ToString());
cmd2.Parameters.AddWithValue("@qty", dataGridView2.Rows[i].Cells[1].Value.ToString());
}
答案 0 :(得分:0)
你应该在循环中调用 cmd2.ExecuteNonQuery(); ...否则不会执行sql命令
要获得更好的解决方案,您应该在循环之前转移到cmd2的创建。还在那里添加参数(没有赋值)...在循环内部只需赋值并调用ExecuteNonQuery。
也许最好的解决方案是使用数据绑定和带有指定UpdateCommand的SqlDataAdapter。
刚刚看到您的代码中可能存在错误...您使用 Cell [1] 中的值来 参数...
例如: 首先创建一个DataTable ... var dt = new DataTable();
然后将网格中所需的列添加到DataTable ... dt.Columns.Add(“xyz”);
然后将DataTable附加到您的网格: dataGridView2.DataSource = dt;
现在您应该可以编辑“xyz”列的内容。将值写入您创建SqlDataAdapter的数据库... var adp = new SqlDataAdapter();
然后设置 adp.InsertCommand = new SqlCommand(...)和 adp.UpdateCommand = new SqlCommand(...)
现在您可以调用 adp.Update(); 并将网格中的所有值写入db ...,对于新添加的行,将调用InsertCommand,对于已编辑的行,将调用UpdateCommand