C# 用于数据库数据和文件复制的书面传输脚本

C# 用于数据库数据和文件复制的书面传输脚本,c#,sql,sql-server,entity-framework,ado.net,C#,Sql,Sql Server,Entity Framework,Ado.net,我知道这对于的标准来说是一个有点普遍的问题,所以,但我读过几篇关于类似主题的文章,每个人都说“这是一个临时工作”,但我越想办法,我就越困惑。我需要找到一些解决方案,最终它可能是任何解决方案,但如果它确实是标准和简单的,我想至少得到我应该遵循的基本步骤来做到这一点,甚至更好-一个教程或类似的东西,涵盖了类似于我的主题 我拥有的是一个继承的数据库,其中有3个表,其中有一列图片。在旧数据库中,此列是一个字符串字段,保存文件源的整个路径,例如C:\Images\SomeFolder\SomeImage.

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

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

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

  • 图片
    列中获取值
  • 检查是否存在现有文件(类似于
    file.Exist
    我可以想象)
  • 更改图像文件的名称(有新的命名约定,因此必须相应地更改所有名称)
  • 将图像文件复制到目标文件夹(路径在脚本中硬编码或取自表
    Config
  • 复制新数据库列中的新图像文件名
    Picture
  • 对表中的所有行以及包含
    Picture
    列的所有表执行此操作(由于只有3个表,因此再次进行硬编码)
  • 关于复制失败的文件和详细信息的某种报告(表、行、文件名-我不确定这里最好显示什么)
  • 我读了很多关于
    BulkCopy
    的书,但到目前为止,我认为这不是我应该寻找的解决这个问题的方法。我有一些棘手的部分,因为-它不必是一个现有的图像与路径采取从旧的数据库,所以如果是这样的情况下,我必须继续,但也记录该信息。此外,即使不可能发生这种情况,在执行过程中,更确切地说,在将图像文件再次复制到新位置的过程中,可能会出现错误。我想我应该只记录错误,但不太确定,因为存在实际的图像

    但是,您建议采用什么方法来实现这一点?使用什么,是否有专门为这种情况设计的东西,我应该知道。我现在只知道我要用
    C
    来写。它很可能是
    命令行
    应用程序,并且可能需要作为
    .exe
    运行,我不确定这是否会带来任何困难

    附言


    我不确定这对于当前情况是否重要,但新应用程序是使用
    ADO.NET实体框架构建的。正在开发的服务器是
    MS SQL server 2012
    ,但正在工作的服务器将是
    MS SQL server 2008
    。我不确定这是否也会成为一个问题,因为现在除了不同的排序规则之外,我们没有任何兼容性问题,但这是固定的。

    我更愿意使用这个解决方案

    设计一个中间表,即所谓的
    PictureRepository
    表,此表将包含从源读取数据所需的所有列,以及需要保存在目标表上的所有列和额外列,如状态、错误描述和

  • 读取数据
    (通过读取源表填写PictureRepository)
  • 验证数据
    (通过读取PictureRepository验证图片的存在和…如果需要,更新统计数据和错误描述列)
  • 操作
    (创建新图像文件名并更新PictureRepository中的列)
  • 保存数据
    (从PictureRepository读取无错误数据行并将其保存到目标表)
  • 报告将通过从PictureRepository读取错误数据来完成。
    根据您的问题复杂性和经验,您可以在C#或SQL中执行这些阶段(读取数据和保存数据可以通过存储过程完成)


    希望对您有所帮助

    如果您的数据量很大,那么使用C#或任何ORM都不适合解决性能问题,您的数据库是什么?我不确定我是否完全理解您的问题。共有3张桌子和大约1800张图片——一张桌子1000英寸,左边两张桌子各400英寸。我使用的是ADO.NET实体框架,但数据库本身托管在
    MSSQLServer2008
    上。我认为最好使用C#和普通的ADO.NET/SQL,但我不确定,这就是我问的原因。在1800个记录计数中,使用EF或ADO.NET会很好(当记录计数很大时,ORM将没有帮助,您需要使用DB核心函数,如TSQL)是的,但我不担心数据大小。一点也不令人印象深刻。困扰我的是所需的定制。检查现有文件,复制图像,甚至通过一些字符串操作来更改名称。。如果我只是逐行读取每个表,我认为效率不高。根据我目前的知识,我要做的就是从旧数据库中读取行->完成我的工作->将数据写入新数据库。一行一行,一张桌子一张桌子。这真的是一个正确的方法吗?谢谢,额外桌子的想法听起来很有趣,尽管我现在还不会接受你的答案。我希望会有更多的人提出建议。