0

我正在将 SQL DMO 逻辑迁移到 SQL SMO 逻辑,但我不确定如何为一些属性实现相同的功能。这是 DMO:

    oBCP = New SQLDMO.BulkCopy2
    With oBCP
        .ImportRowsPerBatch = ImportRowsPerBatch                 
        .DataFilePath = Path.Combine(gtSysTempDir, "file.dat")     
        .LogFilePath = Path.Combine(gtSysTempDir, "file.log")      
        .ErrorFilePath = Path.Combine(gtSysTempDir, "file.err")     
        .MaximumErrorsBeforeAbort = 1                   
        .DataFileType = SQLDMO.SQLDMO_DATAFILE_TYPE.SQLDMODataFile_TabDelimitedChar
    End With

这是迄今为止的 SMO:

    trans = New Transfer
    With trans
        .ImportRowsPerBatch = ImportRowsPerBatch                 
        .TargetDatabaseFilePath = Path.Combine(gtSysTempDir, "file.dat")     
        .TargetLogFilePath = Path.Combine(gtSysTempDir, "file.log")       
        '.ErrorFilePath = Path.Combine(gtSysTempDir, "file.err")     
        .MaximumErrorsBeforeAbort = 1                   
        .DataFileType = SQLDMO.SQLDMO_DATAFILE_TYPE.SQLDMODataFile_TabDelimitedChar
    End With

ImportRowsPerBatch (BatchSize?)、ErrorFilePath、MaxErrorsBeforeAbort 和 DataFileType 的等价物(如果存在)是什么?谢谢。

4

1 回答 1

0

尽管MSDN 说了什么Transfer但实际上并不等同于BulkCopy2; 它用于编写/复制整个数据库的脚本,而BulkCopy2仅用于批量复制数据。这些设置根本不对应 - 特别是,Transfer.TargetDatabaseFilePath应该是数据库文件BulkCopy2.DataFilePath的位置,而导入/导出数据所在的文件的位置。一些批量复制方案由 处理Transfer,但大多数不是。

如果您实际上并没有复制整个数据库,那么您有几个选择,其中没有一个使用 SMO(它没有用于批量复制的类):

  • 直接调用BULK INSERT语句,这可能是BulkCopy2在后台执行的操作(但我还没有验证这一点);
  • 使用SqlBulkCopy类,这将需要一些额外的代码(但它也提供了更大的灵活性,因为要导入的数据可以来自任何来源);
  • 构建命令行并调用bcp

其中,BULK INSERT是最直接的。

于 2014-12-18T12:27:41.523 回答