从 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