C# 合并遗留数据的最佳方法

C# 合并遗留数据的最佳方法,c#,sql,batch-file,C#,Sql,Batch File,我正在为我在C#的业务开发一个价目表管理程序(原型是Win形式的,但我正在考虑将WPF用于最终ap作为MVVM学习练习) 我们的EMS系统基于COBOL后端,并将保持这种方式至少3年,所以我不能真正直接访问它的数据。我希望定期从EMS系统中提取数据,以确保定价保持同步(并以不可编辑的方式向用户提供一些其他信息,如bin位置)。我正在做的是 使用WinBatch每晚自动运行报告,然后使用Monar将文本报告转换为平面文件(.xls?) 将文件放入一个文件夹,编写一个小ap将其读入并添加到数据库中

我正在为我在C#的业务开发一个价目表管理程序(原型是Win形式的,但我正在考虑将WPF用于最终ap作为MVVM学习练习)

我们的EMS系统基于COBOL后端,并将保持这种方式至少3年,所以我不能真正直接访问它的数据。我希望定期从EMS系统中提取数据,以确保定价保持同步(并以不可编辑的方式向用户提供一些其他信息,如bin位置)。我正在做的是

使用WinBatch每晚自动运行报告,然后使用Monar将文本报告转换为平面文件(.xls?) 将文件放入一个文件夹,编写一个小ap将其读入并添加到数据库中

我应该如何将其添加到数据库中?(SQL Express)我可以有一个每次都被完全替换的表,但大多数情况下我是初学者,我担心如果在价目表ap使用数据库时替换整个表会发生什么情况


Mike

首先从旧版应用程序创建一个.txt文件。然后使用批插入将其拉入工作表,以便进行任何需要进行的清理。使用t-sql进行清理。然后运行t-sql将新数据插入适当的表和/或更新数据已更改的行。如果记录太多,请分批插入和更新。将所有这些作为作业安排在数据库不忙的时间内运行


当然,您可以在SSIS中做到最好,但我不知道Express是否提供这些功能。

首先从旧版应用程序创建一个.txt文件。然后使用批插入将其拉入工作表,以便进行任何需要进行的清理。使用t-sql进行清理。然后运行t-sql将新数据插入适当的表和/或更新数据已更改的行。如果记录太多,请分批插入和更新。将所有这些作为作业安排在数据库不忙的时间内运行


当然,您可以在SSIS中做到最好,但我不知道Express是否提供这些功能。

是否有任何字段/表格可以告诉您上次更新价格的时间?如果是这样的话,您只需拉取最近更新的行并更新数据库中的行。。。。假设您在cobol应用程序的数据存储中有一个现成的唯一主键

但这并不是最新的,因为您正在以夜间脚本的形式运行它,以更新新应用程序使用的数据库。您可以创建一个.net脚本,专门查询cobol数据存储,以获取用户所需的任何价格,如果cobol数据存储的更新时间比您记录的时间要晚,请更新SQL Server记录


(我对cobol一点也不熟悉,只是随便说说而已)

有没有字段/表格可以告诉您上次更新价格的时间?如果是这样的话,您只需拉取最近更新的行并更新数据库中的行。。。。假设您在cobol应用程序的数据存储中有一个现成的唯一主键

但这并不是最新的,因为您正在以夜间脚本的形式运行它,以更新新应用程序使用的数据库。您可以创建一个.net脚本,专门查询cobol数据存储,以获取用户所需的任何价格,如果cobol数据存储的更新时间比您记录的时间要晚,请更新SQL Server记录


(我对cobol一点也不熟悉,只是随便说说而已)

如果截断并重新填充整个表,那么应该在一个事务中完成,并放置一个完整的表锁。这样更安全、更快


您还可以更新所有更改的行,然后插入新的行(缺少的行),然后删除此运行中未更新的所有行(在每行中插入某种版本号以确定这一点)。

如果截断并重新填充整个表,则应在一个事务中完成此操作,并放置一个完整的表锁。这样更安全、更快


您还可以更新所有已更改的行,然后插入新的行(缺少的行),然后删除此运行中未更新的所有行(在每行中插入某种版本号以确定这一点)。

我有三个答案,倾向于codymanix的想法?我有三个答案,倾向于codymanix的想法?