Datatable.Load 不删除已删除的行
Datatable.Load doesn't remove deleted rows
我在从 SQL 服务器数据库读取数据到 Datatable 时遇到问题。我正在使用 Datatable 作为我的 DataGridView 的数据源,并使用以下代码填充来自 SQL 服务器 table 的数据 table。此代码每 10 秒运行一次以保持结果更新,并且在修改或添加行时(从程序的另一个实例或直接从 ssms)运行正常,但是当从数据库中删除行时,它们保留在数据中table.
例如,如果我最初使用以下查询加载 table:
SELECT TOP 10 *
FROM Table
然后用
载入
SELECT TOP 5 *
FROM Table
数据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
Fills a DataTable with values from a data source using the supplied
IDataReader. If the DataTable already contains rows, the incoming data
from the data source is merged with the existing rows.
您可以通过Restet方法创建新数据表或清除现有数据表。
Resets the DataTable to its original state. Reset removes all data,
indexes, relations, and columns of the table. If a DataSet includes a
DataTable, the table will still be part of the DataSet after the table
is reset.
所以你的代码:
using (SqlDataReader reader=command.ExecuteReader())
{
dt.Load(reader);
}
可以看起来像:
using (SqlDataReader reader=command.ExecuteReader())
{
dt.Reset();
dt.Load(reader);
}
我在从 SQL 服务器数据库读取数据到 Datatable 时遇到问题。我正在使用 Datatable 作为我的 DataGridView 的数据源,并使用以下代码填充来自 SQL 服务器 table 的数据 table。此代码每 10 秒运行一次以保持结果更新,并且在修改或添加行时(从程序的另一个实例或直接从 ssms)运行正常,但是当从数据库中删除行时,它们保留在数据中table.
例如,如果我最初使用以下查询加载 table:
SELECT TOP 10 *
FROM Table
然后用
载入SELECT TOP 5 *
FROM Table
数据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
Fills a DataTable with values from a data source using the supplied IDataReader. If the DataTable already contains rows, the incoming data from the data source is merged with the existing rows.
您可以通过Restet方法创建新数据表或清除现有数据表。
Resets the DataTable to its original state. Reset removes all data, indexes, relations, and columns of the table. If a DataSet includes a DataTable, the table will still be part of the DataSet after the table is reset.
所以你的代码:
using (SqlDataReader reader=command.ExecuteReader())
{
dt.Load(reader);
}
可以看起来像:
using (SqlDataReader reader=command.ExecuteReader())
{
dt.Reset();
dt.Load(reader);
}