从 SQL DMO 迁移到 SQL SMO (SQL Server 2012)

Posted

技术标签:

【中文标题】从 SQL DMO 迁移到 SQL SMO (SQL Server 2012)【英文标题】:Migrating from SQL DMO to SQL SMO (SQL Server 2012) 【发布时间】:2014-12-10 20:16:31 【问题描述】:

我正在将 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 的等价物(如果存在)是什么? 谢谢。

【问题讨论】:

【参考方案1】:

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

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

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

其中,BULK INSERT 是最直接的。

【讨论】:

以上是关于从 SQL DMO 迁移到 SQL SMO (SQL Server 2012)的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBS (SQL DMO) 创建 SQL Server 2008 R2 数据库时出错

使用 SMO 在并行循环中从 .net 中的 SQL 服务器数据库中编写对象定义脚本

我在附加数据库时出现这示一个对话框提示:Micrsoft sql_dmo(odbc sqlstate:HY000)错误:823

如何使用 SMO 脚本生成 sql 脚本

[转]SQL Server编程:SMO介绍

使用 SSMA 将 Access 2007 数据库应用程序迁移到 SQL Server 2005 - 问题