我正在尝试使用以下代码执行包含GO语句的SQl脚本
SqlConnection sqlConnection = new SqlConnection(RConnString);
ServerConnection svrConnection = new ServerConnection(sqlConnection);
Server server = new Server(svrConnection);
returnvalue = server.ConnectionContext.ExecuteNonQuery(strSpScript);
return Convert.ToString(returnvalue);
但它会在现场直播后抛出。这段代码在我的本地电脑上工作正常
调用目标抛出了异常。在 System.RuntimeMethodHandle.InvokeMethod(Object target,Object [] 参数,签名sig,布尔构造函数)at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object []参数,Object []参数)at System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo文化) 在System.RuntimeType.InvokeMember(String name,BindingFlags bindingFlags,Binder binder,Object target,Object [] providedArgs, ParameterModifier []修饰符,CultureInfo文化,String [] namedParams)at Microsoft.SqlServer.Management.Common.ServerConnection.GetStatements(字符串 query,ExecutionTypes executionType,Int32& statementsToReverse)at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(字符串 sqlCommand,ExecutionTypes executionType)at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(字符串 的SqlCommand)
答案 0 :(得分:6)
GO
不存在。它是SQL Server Management Studio等工具的一个特性,而不是语言本身。相反,您应找到任何GO
,将命令拆分,然后单独执行。或者,重构您的T-SQL,使其无法GO
工作 - 在很多情况下,EXEC
可以在此处提供帮助。
答案 1 :(得分:2)
使用以下代码:
using (var connection = new SqlConnection(RConnString))
{
connection.Open();
foreach (var batch in strSpScript.Split(new string[] {"\nGO", "\ngo"}, StringSplitOptions.RemoveEmptyEntries))
{
try
{
new SqlCommand(batch, connection).ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
}
}
只有在换行符上有“GO”(并且在一致的情况下)时才会这样做 - 根据需要进行修改。