问题
I am a beginner with .net. I faced issue with the following error
"The transaction operation cannot be performed because there are pending requests working on this transaction.".
i read somewhere in the blog .i appended my connection string with enlist=true and the issue was resolved.
Note: i am upgrading my DB from sql server 2005 to sql server 2008R2.
Please help to understand the importance of using enlist.
回答1:
Enlisting is user for Distributed Transaction
The Connection object will automatically enlist in an existing distributed transaction if it determines that a transaction is active. Automatic transaction enlistment occurs when the connection is opened or retrieved from the connection pool. You can disable auto-enlistment in existing transactions by specifying
Enlist=falseas a connection string parameter for a SqlConnection, or OLE DB Services=-7 as a connection string parameter for an OleDbConnection.
Note The Connection must be open before calling EnlistDistributedTransaction.
Here is an example for you with Enlist=False;
回答2:
The MSDN says:
The ConnectionString property supports a keyword, Enlist, which indicates whether System.Data.SqlClient will detect transactional contexts and automatically enlist the connection in a distributed transaction. If Enlist=true, the connection is automatically enlisted in the opening thread's current transaction context. If Enlist=false, the SqlClient connection does not interact with a distributed transaction. The default value for Enlist is true. If Enlist is not specified in the connection string, the connection is automatically enlisted in a distributed transaction if one is detected when the connection is opened.
来源:https://stackoverflow.com/questions/35716193/what-is-enlist-false-means-in-connection-string-for-sql-server