【问题标题】:updating the values in database from datagridview从 datagridview 更新数据库中的值
【发布时间】:2013-11-02 22:32:30
【问题描述】:

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

【问题讨论】:

  • 到目前为止你尝试过什么?一种可能性是将 DataGridView 绑定到 DataTable 并使用 the SqlCommandBuilder helper class 为您生成插入/选择/更新/删除命令,一旦绑定到 UI 元素,因此对数据库的更改是“自动”进行的。
  • 我想通过使用按钮来更改数据库。我的意思是当一切都在 datagridview 中得到确认时,然后使用按钮进行更改
  • 这是我迄今为止尝试过的代码,我在 for 循环中遇到错误:for (int i = 0; dataGridView2.Rows.count; i++) { SqlCommand cmd2 = new SqlCommand("更新 prod_info 设置 item_quantity=@qty wherebarcode=@barcode ", con); cmd2.Parameters.AddWithValue("@barcode", dataGridView2.Rows[i].Cells[1].Value.ToString()); cmd2.Parameters.AddWithValue("@qty", dataGridView2.Rows[i].Cells[1].Value.ToString()); }
  • @pasty 我已经编辑了主要问题,你可以看到那里的变化
  • @HaiderKhattak 你收到了什么样的错误?你的循环什么都不做,只是创建一个命令,添加一些参数,什么都不做。

标签: c# winforms datagridview


【解决方案1】:

你应该在你的循环中调用 cmd2.ExecuteNonQuery(); ...否则不会执行任何 sql 命令

要获得更好的解决方案,您应该在循环之前创建 cmd2。还在那里添加参数(不分配值)......在循环内只需分配值并调用 ExecuteNonQuery。

也许最好的解决方案是使用数据绑定和分配了 UpdateCommand 的 SqlDataAdapter。

刚刚看到您的代码中可能存在错误...您将 Cell[1] 中的值用于 both 参数... p>

示例: 首先创建一个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 .

【讨论】:

  • 实际上我想将 cell[1] 的值更新到数据库中...Rows[i] 只是定义为定位行并根据条形码更新数量...你能举个数据绑定的例子...???
猜你喜欢
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 2016-10-20
  • 2012-04-03
  • 2015-05-20
  • 1970-01-01
相关资源
最近更新 更多