在SqlCommand.ExecuteNonQuery()中使用GO(提交)

时间:2016-03-18 17:18:02

标签: c# .net commit sqlcommand executenonquery

当我使用SqlCommand.ExecuteNonQuery()并且CommandText有一个GO(提交)它时,我得到一个SQLException。

我删除它并且SQL工作,但整个SQL有很多语句,我想在每个语句运行后提交。而且我不想将它们分成多个SqlCommand个对象。

是否有更好的解决方案来保持提交并保留唯一的SqlCommand对象?

2 个答案:

答案 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()