我有一个带有SQLite数据库的c#应用程序。它有一个名为“Results_to_Risks”的表,我正在尝试更新。我先删除本地数据表中的一些行,然后使用更新表函数更新数据库中的表。
foreach(var row in temp)
{
allResToRisks.Rows.Remove(row);
}
_databaseController.UpdateTable(allResToRisks, "Results_to_Risks");
我的数据库控制器更新表方法:
// Updates an entire database table.
public void UpdateTable(DataTable datatable, string table, string condition = "")
{
using (SQLiteConnection dbConnection = new SQLiteConnection(conString))
{
using (var sqliteAdapter = new SQLiteDataAdapter("SELECT * FROM '" + @table + "'" + @condition, dbConnection))
{
dbConnection.Open();
using(var builder = new SQLiteCommandBuilder(sqliteAdapter))
{
sqliteAdapter.Update(datatable);
}
}
}
}
在这种特殊情况下,我只删除一行。数据表最终为空(Rows.Count == 0),因为这是该数据表中唯一的行。所以没有什么不妥。但是我的数据库中的表仍然有一行。
我做错了什么?
我在MDSN网站上看到了这个:
了解删除DataTable中的行与删除行之间的区别非常重要。当您调用Remove或RemoveAt方法时,将立即删除该行。如果随后将DataTable或DataSet传递给DataAdapter并调用Update,则后端数据源中的任何相应行都不会受到影响。使用Delete方法时,该行仍保留在DataTable中并标记为删除。如果然后将DataTable或DataSet传递给DataAdapter并调用Update,则会删除后端数据源中的相应行。
所以我尝试使用Delete()
代替Remove()
。但是,这没有任何区别。