Я пытаюсь написать библиотечную функцию Powershell для возврата объекта SQL BulkCopy, который затем можно использовать в различных сценариях.
Вот моя функция до сих пор:
Function CreateBulkCopyObjectWithTransaction
{
Param
(
[System.Data.SqlClient.SqlConnection] $sqlConnection
, [System.Data.SqlClient.SqlTransaction] $sqlTransaction
, [string] $destinationTable
, $dataTable
)
$bulkCopy = New-Object System.Data.SqlClient.SqlBulkCopy($sqlConnection,[System.Data.SqlClient.SqlBulkCopyOptions]::Default,$sqlTransaction);
$bulkCopy.DestinationTableName = $destinationTable;
foreach ($dataColumn in $dataTable.Columns)
{
$bulkCopy.ColumnMappings.Add($dataColumn.ColumnName, $dataColumn.ColumnName)
}
return $bulkCopy;
}
А вот пример использования:
$dataTable = $eventLogs | OutputToDataTable; #OutputToDataTable is another custom function and works perfectly
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection($connectionString);
$sqlConnection.Open();
$sqlTransaction = $sqlConnection.BeginTransaction();
$bulkCopy = CreateBulkCopyObjectWithTransaction -sqlConnection $sqlConnection -sqlTransaction $sqlTransaction -destinationTable $destinationTable -dataTable $dataTable;
Try
{
$bulkCopy.WriteToServer($dataTable);
$sqlTransaction.Commit();
}
Catch
{
$sqlTransaction.Rollback();
Write-Host ("Error - " + $_.Exception.Message);
}
$sqlConnection.Close();
Моя проблема заключается в том, что функция CreateBulkCopyObjectWithTransaction не возвращает объект SQLBulkCopy, как мне хотелось бы, поскольку я получаю сообщение об ошибке:
Вызов метода завершился неудачно, так как [System.Object[]] не содержит метод с именем "WriteToServer".
Я просмотрел различные сообщения, в том числе этот здесь о неожиданных объектах, все еще находящихся в конвейер, но не вижу, что это проблема, так как все имеет назначение.
ИЗМЕНИТЬ:
Кроме того, этот пост здесь, предложенный Ансгаром, не отвечает на мой вопрос как это относится к попытке вызвать метод в массиве. Я пытаюсь вернуть тип .Net и вызвать для него метод.
$bulkCopy.ColumnMappings.Add($dataColumn.ColumnName, $dataColumn.ColumnName)
. - person user4003407   schedule 17.03.2016