我正在尝试在SQL中执行SQL批量复制操作,它的行为非常不一致..
以下是我正在使用的代码:
function Copy
{
$con = New-Object System.Data.SqlClient.SqlConnection
$con.ConnectionString = "Server = $($ServerInstance); Database = ($DatabaseName); Trusted_Connection=True;"
$con.open()
$insertData = New-Object System.Data.SqlClient.SqlBulkCopy($con)
$insertData.DestinationTableName = $destinationTableName
for($i=0;$i -lt $reader.FieldCount;$i++)
{
$insertData.ColumnMappings.Add($reader.GetName($i), $reader.GetName($i))
}
try{
write-host "Writing data to Server"
write-host "$($reader.GetType())"
write-host "$($reader.HasRows)"
write-host "$($reader.FieldCount)"
$insertData.WriteToServer($reader)
Write-host "Data written"
}
catch [Exception]
{
write-host $_.Exception.ToString()
write-host $_.Exception.Data
}
$insertData.Close()
$con.Close()
}
输出在控制台上显示为:
Writing data to Server
System.Data.SqlClient.SqlDataReader
True
5
Data written
现在我的读者有行,也有计数。我已经验证列映射完全相同。
这有点有趣,因为这是在我的一个Devbox上工作但现在不能用于剩下的,我丢失了工作盒。
我已经克隆了相同的源代码。
这也没有任何例外。现在我知道SqlBulkCopy
作为一个事务工作,如果有任何问题它会全部回滚,但是try catch不应该抛出错误吗?
非常感谢任何帮助。