如何使用 SQL 命令从我的 DataTable 对象中使用 foreach-loop 更新 C# 中的 MS Access 数据库?
Posted
技术标签:
【中文标题】如何使用 SQL 命令从我的 DataTable 对象中使用 foreach-loop 更新 C# 中的 MS Access 数据库?【英文标题】:How to update MS Access database in C# with foreach-loop from my DataTable object with SQL command? 【发布时间】:2021-07-12 21:03:54 【问题描述】:我正在尝试使用 foreach 循环更新我的 MS Access 数据库,该循环遍历我在 DataGrid (WPF) 中看到的 DataTable 对象的所有行;它应该更新数据库中的表。
在我对一列的一行进行了一些更改后,我想保存它们。但是我的 SQL 命令只反应一次(最后一个循环)。 MessageBox 显示了我想在每个循环中更新的正确行。但是当我再次打开数据库时,整个列都是空的。
希望有人可以帮助我 :) 我绝对是编程的初学者
OleDbCommand Command2 = new OleDbCommand();
Command2.Connection = Connection;
Connection.Open();
foreach (DataRow DR1 in DT1.Rows)
string S1 = Convert.ToString(DR1["Column1"]);
MessageBox.Show("Current Row: " + S1 +" will be updated");
Command2.CommandText = "UPDATE Table1 SET Column1= '" + S1 + "' WHERE ID = 0 ";
Command2.ExecuteNonQuery();
Connection.Close();
【问题讨论】:
使用 DataAdapter 填充 DataTable(参见docs.microsoft.com/en-us/dotnet/api/…)。然后修改DataTable。下一步添加逗号(请参阅docs.microsoft.com/en-us/dotnet/api/…)。现在您可以使用适配器更新方法将更改写回数据库。 感谢您的回复!嗯,我试着像你告诉我的那样实现它,但它仍然行不通。只有我的 foreach 循环的最后一次迭代将它写回我的数据库:X 这次我使用了 DataAdapter "DA1"。 数据库有主键吗? ExecuteNonQerry 返回一个整数,指示更改的行数。价值是什么?看起来代码正在写回与读取相同的内容。你怎么知道只有最后一行在回写?你有例外吗?你经历了多少次 for 循环? 您好,感谢您的回复 :) 数据库没有主键。我使用 Access 检查数据库并查看它是否更新了数据。在那里我可以查看数据是否已更新。我尝试了其他一些方法,现在只有第一个循环起作用了。 如果您在 Access 中看到更改,则 c# 中的视图在更改后不会更新。您如何查看 c# 中的数据? 【参考方案1】:这对我有用:)
foreach (DataRow DR1 in DT1.Rows)
DA1.UpdateCommand = new OleDbCommand("UPDATE Table1 SET Column1 = @Column1 WHERE ID= @ID", Connection);
DA1.UpdateCommand.Parameters.Add("@Column1", OleDbType.VarChar).Value = Convert.ToString(DR1["Column1"]);
DA1.UpdateCommand.Parameters.Add("@ID", OleDbType.VarChar).Value = Convert.ToString(DR1["ID"]);
DA1.UpdateCommand.ExecuteNonQuery();
【讨论】:
以上是关于如何使用 SQL 命令从我的 DataTable 对象中使用 foreach-loop 更新 C# 中的 MS Access 数据库?的主要内容,如果未能解决你的问题,请参考以下文章
DataTable可视化工具从我的Visual Studio中消失了
如何在谷歌云平台中使用私有 IP 从我的电脑连接到 sql 实例