当我使用SqlCommand.ExecuteNonQuery()
并且CommandText
有一个GO
(提交)它时,我得到一个SQLException。
我删除它并且SQL工作,但整个SQL有很多语句,我想在每个语句运行后提交。而且我不想将它们分成多个SqlCommand
个对象。
是否有更好的解决方案来保持提交并保留唯一的SqlCommand
对象?
答案 0 :(得分:7)
GO
未提交,它是批处理分隔符。您需要将命令批处理拆分为块并省略GO
,以便能够使用SqlCommand.ExecuteNonQuery()
执行它们。
交易处理是独立完成的。当您在循环中执行多个命令时,您可以在同一个SqlTransaction
中自由运行它们,为每次迭代启动一个新事务,或者保持SqlCommand.Transaction
属性不被分配。
答案 1 :(得分:1)
这是我的PowerShell解决方案:
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") > $null
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") > $null
$cnSQL=New-Object System.Data.SqlClient.SqlConnection("Server=$($env:COMPUTERNAME)\$InstanceName;Database=master;User Id=$User;Password=$Pwd")
$cnServer=New-Object Microsoft.SqlServer.Management.Common.ServerConnection($cnSQL)
$strSQL=Get-Content -Path "sqlFile.txt" | Out-String
$cnServer.ExecuteNonQuery($strSQL) > $null
$cnSQL.Close()