我正在为我在C#的业务开发一个价目表管理程序(原型是Win表单,但我正在考虑使用WPF作为MVVM学习练习)。
我们的EMS系统基于COBOL后端,并将保持至少3年,因此我不能直接访问它的数据。我想定期从他们的EMS系统中提取数据,以确保定价保持同步(并以不可编辑的方式向用户提供一些其他信息,如仓位)。我想要做的是……
使用Monarch每晚自动运行报告,然后使用WinBatch将文本报告转换为平面文件(.xls?)将文件放到一个文件夹中,并编写一个小ap来读取该文件并将其添加到数据库中
我应该如何将其添加到数据库中?(SQL Express)我可以有一个表格,只是被完全替换了一次,但我是一个初学者在大多数情况下,我担心会发生什么,如果整个表被替换,而数据库正在使用的价目表ap。
麦克
发布于 2009-11-21 02:35:27
如果您截断并重新填充整个表,则应在单个事务中执行此操作,并放置一个完整的表锁。这更安全,也更快。
您还可以更新所有更改的行,然后插入新的(丢失的行),然后删除在此运行中未更新的所有行(在每行中插入某种版本号以确定这一点)。
发布于 2009-11-21 02:33:13
首先,从遗留应用程序创建一个.txt文件。然后使用批插入将其拉入工作表中,以便进行任何需要的清理。使用t-sql进行清理。然后运行t-sql将新数据插入到适当的表中和/或更新数据已更改的行。如果有过多的记录,请批量插入和更新。将所有这些都安排为一个作业,以便在数据库不忙的时候运行。
当然,您可以在SSIS中做得最好,但我不知道Express是否可以做到这一点。
发布于 2009-11-21 02:34:23
是否有任何字段/表可用来告诉您上次更新价格的时间?如果是这样的话,你可以拉出最近更新的行,并在数据库中更新它……假设您的cobol应用程序的数据存储中有一个现成的唯一主键。
但这并不是最新的,因为您将其作为夜间脚本运行,以更新新应用程序使用的数据库。您可以创建一个.net脚本来专门查询cobol数据存储,无论用户想要什么价格,如果cobol数据存储的更新时间比您所记录的更新时间更近,则更新SQL Server记录。
(我对cobol一点也不熟悉,只是在那里抛出一些想法)
https://stackoverflow.com/questions/1772387
复制相似问题