繁体   English   中英

Datatable.Load不会删除已删除的行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM