从datagridview更新数据库中的值

时间:2013-11-02 22:32:31

标签: c# winforms datagridview

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

1 个答案:

答案 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