我正在尝试编写一个库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'
的方法。我已经审核了各种帖子,包括关于意外对象仍然在管道中的here,但由于所有内容都有分配,因此无法看到这是问题。
修改
另外,Ansgar建议的这篇帖子here没有解决我的问题,因为它涉及尝试在数组上调用方法。我正在尝试返回.Net类型并在其上调用方法。