将数据从SQL Server数据库读取到Datatable时,我遇到了问题。我使用Datatable作为DataGridView的数据源,并使用以下代码从SQL Server表中填充数据表。此代码每10秒运行一次,以保持结果更新,并在修改或添加行时(从程序的另一个实例或直接从ssms)正常工作,但是当从数据库中删除行时,它们将保留在数据表中。
例如,如果我最初使用以下查询加载表:
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();
}
我该如何解决这个问题?
答案 0 :(得分:0)
这不是。这样就可以了。 来自MSDN
使用提供的数据源使用数据源中的值填充DataTable IDataReader的。如果DataTable已包含行,则传入数据 来自数据源与现有行合并。
您可以按Restet方法创建新数据表或清除现有数据。
将DataTable重置为其原始状态。重置删除所有数据, 表的索引,关系和列。如果DataSet包含 在DataTable中,表仍然是表之后的DataSet的一部分 重置。
所以你的代码:
using (SqlDataReader reader=command.ExecuteReader())
{
dt.Load(reader);
}
可以看起来像:
using (SqlDataReader reader=command.ExecuteReader())
{
dt.Reset();
dt.Load(reader);
}