Миграция с SQL DMO на SQL SMO (SQL Server 2012)

Я перевожу логику 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

Это СМО пока что

    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 ответ

Несмотря на то, что MSDN говорит, Transfer на самом деле не является эквивалентом BulkCopy2; он предназначен для создания сценариев / копирования целых баз данных, тогда как BulkCopy2 только для массового копирования данных. Настройки не соответствуют вообще - в частности, Transfer.TargetDatabaseFilePath предполагается, что местоположение файла базы данных, тогда как BulkCopy2.DataFilePath расположение файла, в который помещаются импортированные / экспортированные данные. Некоторые сценарии массового копирования обрабатываются Transfer, но большинство нет.

Если вы на самом деле не копируете всю базу данных, у вас есть несколько вариантов, ни один из которых не использует SMO (у которого нет класса для массового копирования как такового):

  • Прямой вызов оператора BULK INSERT, который, вероятно, BulkCopy2 делает в фоновом режиме (но я не проверял это);
  • Использование класса SqlBulkCopy, который потребует некоторого дополнительного кода (но который также предлагает гораздо большую гибкость, поскольку импортируемые данные могут поступать из любого источника);
  • Сборка командной строки и запуск bcp.

Из этих, BULK INSERT самый простой.

Другие вопросы по тегам