c# 从数据表中删除行并使用 TableAdapter.Update 和 .填补



为什么数据表在被清除后仍然不为空?

一开始,我清除了"PasswoerterDataTable"。但是在更新并填充它之后,它不再是空的。我是否误解了 .fill 和 .update 命令的用法?如何纠正我的错误,使"PasswoerterDataTable"最终为空

PasswoerterDataTable.Rows.Clear();
// DataTable is now empty
PasswoerterTableAdapter.Update(PasswoerterDataTable);
PasswoerterTableAdapter.Fill(PasswoerterDataTable);
// DataTable is not empty anymore. Why?

我知道在彼此之后使用 .update 和 .fill 是没有意义的,但我目前正在开发密码管理器,我想删除密码。当程序关闭并重新启动时,这些已删除的密码不应该出现,但我需要在启动后使用 .fill 来获取尚未删除的密码。但是在我使用 .fill 后,密码再次出现。

Fill方法用于从数据库表中读取数据并将其放入内存中的 DataTable 对象中。我认为您误解了清除方法和更新方法的工作。

Clear方法从内存数据表中删除所有行,但不更改数据库表上的任何内容。Update 方法查看PasswoerterDataTable中存在的行,并检查其 RowState 属性。如果它找到要更新的内容,则执行命令以将更改反映回数据库。
但是您已经清除了PasswoerterDataTable中的行,因此 Update 没有任何要更新的内容,并且您的数据库表保持不变。以下填充重新加载所有内容。

如果希望 Update 对数据库执行删除命令,则需要将每行的">行状态"设置为"已删除"。你可以用

foreach(DataRow row in PasswoerterDataTable.Rows)
row.Delete();  // This doesn't remove the row, but sets its RowState to Deleted
// Now the adapter knows what to do...
PasswoerterTableAdapter.Update();

当然,这是完全没有必要的,您可以简单地编写一个命令直接对数据库进行操作以删除表

SqlCommand cmd = new SqlCommand("TRUNCATE TABLE PasswoerterTable", connection);
cmd.ExecuteNonQuery();
PasswoerterDataTable.Rows.Clear(); 
// No need to call Fill again.

最新更新