gpt4 book ai didi

c# - 使用 DataTable.Merge 和 DataTable.GetChanges 进行简单的数据库表比较

转载 作者:行者123 更新时间:2023-11-30 21:23:00 27 4
gpt4 key购买 nike

我们正在将我们的应用程序从使用 Sql Server Express(我们称之为版本 3)转换为 Sql Server Compact Edition(我们称之为版本 4)。我试图确保新产品(第 4 版)和旧产品(第 3 版)从以前版本(第 1 版和第 2 版)进行的升级是相同的。升级代码因各种原因不得不重写。

我正在创建一个快速测试应用程序,它将比较版本 3 Sql Server Express 数据库和版本 4 Sql CE 数据库。如果转换逻辑良好,数据库应该完全等效——相同的表、相同的列、相同的行值。

在我看来,使用 DataTable.MergeDataTable.GetChanges 应该有一种简单的方法来执行此操作,但我没有成功。如果行存在于版本 3 数据库中而不存在于版本 4 数据库中,则 GetChanges 仍会返回 null。如果对相同的行进行更改(基于主键,它是一个 Guid),GetChanges 仍然返回 null。

string selectSql = String.Format("SELECT {0} FROM {1}", String.Join(", ", columns.ToArray()), tableName);

var expressAdapter = new SqlDataAdapter(selectSql, expressConnection);
DataTable expressTable = new DataTable();
expressAdapter.Fill(expressTable);
expressTable.PrimaryKey = new DataColumn[] { expressTable.Columns[tableName + "ID"] };

SqlCeConnection ceConnection = new SqlCeConnection(this.SqlServerCeConnectionString);
var ceAdapter = new SqlCeDataAdapter(selectSql, ceConnection);
DataTable ceTable = expressTable.Clone();
ceAdapter.Fill(ceTable);

expressTable.Merge(ceTable);
return expressTable.GetChanges(); // this is null even when the expressTable has rows that do not exist in ceTable.

我使用 MergeGetChanges 的方式是否偏离了它们的预期用途?如果是这样,欢迎使用其他选项。

最佳答案

我前段时间尝试过类似的事情,但最终没有成功,因为 AcceptChanges 是在 Merge 添加的行上调用的,所以它们都是未修改的状态,所以 GetChanges 返回 null...

关于c# - 使用 DataTable.Merge 和 DataTable.GetChanges 进行简单的数据库表比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2030381/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com