Can I get a reference to a pending transaction from a SqlConnection object?

后端 未结 6 537
無奈伤痛
無奈伤痛 2020-12-30 18:51

Suppose someone (other than me) writes the following code and compiles it into an assembly:

using (SqlConnection conn = new SqlConnection(connString)) 
{
            


        
6条回答
  •  渐次进展
    2020-12-30 19:29

    For anybody who is interested in the C# version of the decorator class that Denis made in VB.NET, here it is:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    
    namespace DataAccessLayer
    {
        /// 
        /// Decorator for the connection class, exposing additional info like it's transaction.
        /// 
        public class ConnectionWithExtraInfo : IDbConnection
        {
            private IDbConnection connection = null;
            private IDbTransaction transaction = null;
    
            public IDbConnection Connection
            {
                get { return connection; }
            }
    
            public IDbTransaction Transaction
            {
                get { return transaction; }
            }
    
            public ConnectionWithExtraInfo(IDbConnection connection)
            {
                this.connection = connection;
            }
    
            #region IDbConnection Members
    
            public IDbTransaction BeginTransaction(IsolationLevel il)
            {
                transaction = connection.BeginTransaction(il);
                return transaction;
            }
    
            public IDbTransaction BeginTransaction()
            {
                transaction = connection.BeginTransaction();
                return transaction;
            }
    
            public void ChangeDatabase(string databaseName)
            {
                connection.ChangeDatabase(databaseName);
            }
    
            public void Close()
            {
                connection.Close();
            }
    
            public string ConnectionString
            {
                get 
                {
                    return connection.ConnectionString; 
                }
                set 
                {
                    connection.ConnectionString = value;
                }
            }
    
            public int ConnectionTimeout
            {
                get { return connection.ConnectionTimeout; }
            }
    
            public IDbCommand CreateCommand()
            {
                return connection.CreateCommand();
            }
    
            public string Database
            {
                get { return connection.Database; }
            }
    
            public void Open()
            {
                connection.Open();
            }
    
            public ConnectionState State
            {
                get { return connection.State; }
            }
    
            #endregion
    
            #region IDisposable Members
    
            public void Dispose()
            {
                connection.Dispose();
            }
    
            #endregion
        }
    }
    

提交回复
热议问题