2

我知道这是一个关于标准的一般性问题,SO但我已经阅读了几篇关于类似主题的文章,每个人都说“这是一个临时工作”,但我越想办法做到这一点,我就越困惑. 我需要找到一些解决方案,最后它可能是任何解决方案,但如果它确实是标准和简单的东西,我想至少获得我应该遵循的基本步骤来做到这一点甚至更好 - 教程或类似的东西涵盖与我类似的主题。

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

所以在旧数据库和新数据库之间发生了这个传输脚本,我需要这个逻辑步骤:

  1. Picture列中获取值
  2. 检查是否存在现有文件(就像File.Exist我想象的那样)
  3. 更改图像文件的名称(有新的命名约定,因此必须相应地更改所有名称)
  4. 将图像文件复制到目标文件夹(路径在脚本中硬编码或取自表格Config
  5. 在新的数据库列中复制新的图像文件名Picture
  6. 对表中的所有行和所有具有Picture列的表执行此操作(再次硬编码,因为只有 3 个表)
  7. 针对未成功复制的文件和详细信息的某种报告(表格、行、文件名 - 我不确定在这里显示什么最好)

我已经阅读了很多,BulkCopy但到目前为止,我认为这不是我应该寻找的解决这个问题的方法。我有一些棘手的部分 - 不一定是与从旧数据库获取的路径相关联的现有图像,所以如果是这种情况,我必须继续,但还要记录该信息。此外,即使不可能发生,在执行过程中,更准确地说,在将图像文件再次复制到新位置期间,某些事情可能会导致错误,我想我应该只记录错误但不太确定,因为存在实际图像。

但是 - 您建议采用什么方法来实现这一点?使用什么,是否有专门为我应该知道的这种情况设计的东西。我现在唯一知道的就是我要把它写在C#. 它很可能是Command Line应用程序,可能需要运行.exe,我不确定仅此一项是否会造成任何困难。

附言

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

4

1 回答 1

3

我更愿意深入解决方案。

Designing an Intermediate table, something called PictureRepository table, this table will have all columns you need to read data from sources and all columns neede to save on target table and extra columns like status, error description and ...

  1. Reading Data (fill PictureRepository by reading source tables).
  2. Validating Data (verifying picture existence and ... by reading PictureRepository. updating stats and error description columns if required)
  3. Operation (creating new image file name and updating the column in PictureRepository)
  4. Saving data (reading no error data rows from PictureRepository and saving them to target table)

Reporting will be done by reading error data from PictureRepository.
you can do the phases in C# or SQL based on your problem complexity and your experience (reading data and saving data could be done by stored procedures).

Hope be helful

于 2013-03-30T19:40:26.623 回答