我知道这对于SO的标准来说是一个有点普遍的问题,但是我已经阅读了几篇有关类似主题的文章,每个人都说“这是一项从头开始的工作”,但是我越想办法做到这一点就越多我很困惑。我需要找到一些解决方案,最后可能是任何解决方案,但是如果确实是一种标准和简单的方法,那么我想至少获得执行或什至更好的基本步骤-教程或类似的东西涵盖了与我相似的主题。

我所拥有的-具有3个表的继承数据库,其中有一个列Picture。在旧数据库中,此列是String字段,其中包含文件源的完整路径,例如C:\Images\SomeFolder\SomeImage.jpeg。还有一个新数据库,在该数据库中也存在相同的列Picture,但其中仅保存图片名称。路径在Config表中,但是我认为这并不重要,因为路径将在传输脚本中进行硬编码(或者我认为这是完成的方法)。

因此,在旧数据库和新数据库之间会发生此传输脚本,我需要执行以下逻辑步骤:


Picture列中获取值
检查是否存在文件(我想像是File.Exist之类的文件)
更改图像文件的名称(有新的命名约定,因此必须相应更改所有名称)
将图像文件复制到目标文件夹(路径在脚本中进行了硬编码或从表Config中获取)
将新的映像文件名复制到新的数据库列Picture
对表中的所有行以及具有Picture列的所有表执行此操作(再次进行硬编码,因为只有3个表)
对于未成功复制的文件和详细信息(表,行,文件名的某种报告)-我不确定最好在此处显示什么


我已经阅读了很多有关BulkCopy的文章,但到目前为止,我认为这不是解决该问题的理想选择。我有一些棘手的部分,因为-不必是与从旧数据库获取的路径相关联的现有映像,因此,在这种情况下,我必须继续但还要记录该信息。另外,即使在执行期间(更确切地说是在再次将映像文件复制到新位置的过程中),也可能会发生错误,我猜我应该只记录该错误,但不能肯定,因为有实际的映像。

但是,您建议采用哪种方法使其正常工作?使用什么以及针对我应该知道的这种情况专门设计的东西。我现在唯一知道的是我要用C#编写它。它很可能是Command Line应用程序,可能需要以.exe身份运行,但我不确定这是否会带来任何困难。

压力

我不确定这对当前情况是否重要,但是新应用程序是使用ADO.NET Entity Framework代码优先方法构建的。开发服务器为MS SQL Server 2012,但工作服务器将为MS SQL Server 2008。我不确定这是否也会成为问题,因为到目前为止,除了不同的归类外,我们没有任何兼容性问题,但这是固定的。

最佳答案

我将更愿意讨论解决方案。

设计一个中间表(称为PictureRepository表),该表将具有您需要从源读取数据的所有列以及需要保存在目标表上的所有列以及状态,错误描述和...等额外的列。


Reading Data(通过读取源表填充PictureRepository)。
Validating Data(通过阅读PictureRepository来验证图片的存在和...。根据需要更新统计信息和错误描述列)
Operation(创建新的图像文件名并更新PictureRepository中的列)
Saving data(不从PictureRepository读取错误数据行并将其保存到目标表)


通过从PictureRepository中读取错误数据来完成报告。
您可以根据问题的复杂性和经验(使用存储过程来读取数据和保存数据)来使用C#或SQL进行操作。

希望有幸福

10-06 13:57
查看更多