【问题标题】:C# sqllite datatable to database update will not workC# sqllite 数据表到数据库更新将不起作用
【发布时间】:2014-08-03 16:43:49
【问题描述】:

我有一个 C# 程序,其中 INSERT、SELECT 工作正常。我想尝试将我的DataGridView 更新到数据库中。

如果我删除 GridView 中的一行,那么它将作为 DataTable 发送到数据库,所有这些都可以正常工作,除了一件事,它将新条目写入我的三行,删除后应该是 2 变成 5。

这是我的代码:

 public void Update(DataTable dataforupdate, string table)
 {
     if (table == "Musik")
     {
         SQLiteDataAdapter adapter = new SQLiteDataAdapter("SELECT * FROM Musik",m_dbConnection);
         SQLiteCommandBuilder builder = new SQLiteCommandBuilder(adapter);
         adapter.Update(dataforupdate);
     }
 }

它应该删除表,然后插入包含所有数据的数据表(因为当有多次删除或插入时,这是最容易做的事情)。

编辑:它现在复制表格并将其插入,因此表格在那里出现了 2 次。 在添加数据表之前使用“DELETE FROM Musik”似乎有点不必要,但它确实有效,如果你能帮助我想知道一个更好的解决方案。

【问题讨论】:

  • 你为什么要删除整个表。您应该删除行并更新行。除非您的更改影响了几乎所有表格,否则您的方法是正确的。
  • 我认为这会更容易,因为我真的不知道如何正确使用它。
  • 目前它需要新条目并插入到数据库中,以及已经存在的所有条目。所以每次我添加一个新条目时,它都会将所有条目 + 1 插入到数据库中,这意味着每次运行时数据库都会加倍。

标签: c# database sqlite


【解决方案1】:

它应该删除表,然后插入包含所有数据的数据表(因为当有多次删除或插入时,这是最容易做的事情)。

我不敢苟同。事实上,你所做的实际上是危险的,因为你没有使用事务。如果清空数据库后出现插入记录的异常会怎样?你失去了一切

在 SQLite(或任何数据库)中进行多次插入/删除是相当简单的,例如

INSERT INTO SomeTable VALUES (A, B, C...) 
INSERT INTO SomeTable VALUES (D, E, F...)
...

对于删除,这一切都取决于删除的条件。例如,如果我想删除 A > 10 的所有记录

DELETE FROM SomeTable WHERE A > 10

我建议您考虑使用像 sqlite-net 这样的 ORM,它可以为您完成大量繁重的 SQL 提升工作。

【讨论】:

  • 感谢您的回答.. 我必须承认我在删除然后插入表格时弄错了。但主要的是这可以使用数据集/数据表来完成,还是我应该只使用纯查询字符串?
  • 我永远不会真正推荐使用纯查询字符串,除非您真的必须这样做,因为您需要确保满足安全要求。使用 ORM 工具通常更安全(也更容易),但是,像现在这样使用 DataTable 并没有什么坏处。我想说的是,您不应该仅仅为了添加/删除几行而清空一个完整的表。
  • 再次嗨.. 谢谢你的回答,我会看看这个 ORM 工具,看看我能不能弄明白。如果我要使用 DataTable,那么我应该如何使用它而不必每次都清空表,因为它在 atm 重复。
  • @T.BYgg 您只需从表中删除不再需要的行,然后更新适配器,请参阅this answer
猜你喜欢
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 2021-09-06
  • 1970-01-01
相关资源
最近更新 更多