0

我想创建一个 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());
            }
4

1 回答 1

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。

于 2013-11-03T15:58:27.330 回答