[英]Datatable.Load doesn't remove deleted rows
从SQL Server数据库读取数据到Datatable时遇到问题。 我将Datatable用作DataGridView的数据源,并使用以下代码从SQL Server表填充数据表。 这段代码每10秒运行一次,以保持结果更新,并且在修改或添加行(从程序的另一个实例或直接从ssms)中时,它们可以正常工作,但是从db中删除行时,它们将保留在数据表中。
例如,如果我最初使用以下查询加载表:
SELECT TOP 10 *
FROM Table
然后加载
SELECT TOP 5 *
FROM Table
数据表仍将有10行。
我尝试了每个LoadOptions
(Upsert,OverwriteChanges和PreserveChanges)相同的结果。
我发现的唯一解决方案是在加载之前调用datatable.Rows.Clear()
,但这会导致其他问题。
using (SqlConnection con = new SqlConnection(_connectionString))
using (SqlCommand command = new SqlCommand(query, con))
{
con.Open();
using (SqlDataReader reader=command.ExecuteReader())
{
dt.Load(reader);
}
con.Close();
}
我该如何解决这个问题?
这不是问题。 这样工作。 从MSDN
使用提供的IDataReader用数据源中的值填充DataTable。 如果DataTable已包含行,则来自数据源的传入数据将与现有行合并。
您可以使用Restet方法创建新的数据表或清除现有数据表 。
将DataTable重置为其原始状态。 重置将删除表中的所有数据,索引,关系和列。 如果数据集包含数据表,则在重置表后,该表仍将是数据集的一部分。
所以你的代码:
using (SqlDataReader reader=command.ExecuteReader())
{
dt.Load(reader);
}
可以看起来像:
using (SqlDataReader reader=command.ExecuteReader())
{
dt.Reset();
dt.Load(reader);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.