如何与SMO服务器连接共享事务?共享连接就像
一样简单var connection = new SqlConnection();
var serverConnection = new ServerConnection(connection);
var server = new Server(serverConnection);
但是如果连接已经存在自己的Transaction
,那么
var connection = new SqlConnection();
connection.BeginTransaction();
当我开始使用服务器对象
时var database = server.Databases[connection.Database];
抛出这个:
当分配给命令的连接处于挂起的本地事务中时,ExecuteNonQuery要求命令具有事务
答案 0 :(得分:3)
我遇到了同样的问题,也无法使其发挥作用。
我的解决方法是使用SQL创建事务。 这允许我在SMO和ADO.NET中使用相同的连接和事务。
Dim srvcn As New ServerConnection(sqlcn)
Dim srv As New Server(srvcn)
Dim sql As String = "SET CONCAT_NULL_YIELDS_NULL, ANSI_NULLS, ANSI_PADDING, QUOTED_IDENTIFIER, ANSI_WARNINGS, ARITHABORT, XACT_ABORT ON " & vbCrLf & _
"SET NUMERIC_ROUNDABORT, IMPLICIT_TRANSACTIONS, NOEXEC OFF " & vbCrLf & _
"GO " & vbCrLf & _
"SET TRANSACTION ISOLATION LEVEL SERIALIZABLE " & vbCrLf & _
"GO " & vbCrLf & _
"BEGIN TRANSACTION" & vbCrLf & _
"GO "
srv.ConnectionContext.ExecuteNonQuery(sql)
完成事务也是通过纯SQL完成的:
srv.ConnectionContext.ExecuteNonQuery("IF @@TRANCOUNT>0 COMMIT TRANSACTION " & vbCrLf & _
"GO " & vbCrLf & _
"SET NOEXEC OFF " & vbCrLf & _
"GO ")
我希望这可能会对你有所帮助,即使这个问题很老......