【问题标题】:Multiple SQL Server connection to my ASP.NET web application多个 SQL Server 连接到我的 ASP.NET Web 应用程序
【发布时间】:2014-01-21 06:17:10
【问题描述】:

我有一个类用于建立与 sql server 的连接。现在我想将我的应用程序与访问我的应用程序的用户分别连接 3 个连接。我如何用这个类来实现它。

namespace SafetyNet.Logic
{
    public class DBManager : IDisposable
    {
        #region Privates
        public const string Database_Index = "";

        private String _innerTransName = "innerTransaction";
        private SqlConnection _conn = null;
        private SqlTransaction _trans = null;
        private bool _disposed = false;
        public static readonly string DBConnectionString = ConfigurationManager.ConnectionStrings["Connection String"].ToString();

        public DBManager()
            : this(DBConnectionString)
        {
            string connection = "";   

            this._innerTransName = "Guide" + DateTime.UtcNow.Ticks.ToString();
        }

        public DBManager(string connectionString)
        {
            string connection = "";
            _conn = new SqlConnection(connectionString);
            this._innerTransName = "Guide" + DateTime.UtcNow.Ticks.ToString();
        }

        public String ConnectionString
        {
            get 
            {
                return ConnectionString;
            }
        }

        private void Open()
        {
            if (_conn != null && _conn.State != ConnectionState.Open)
            {
                _conn.Open();
            }
        }

        public void Close()
        {
            if (_conn != null)
            {
                if (_conn.State == ConnectionState.Open)
                    _conn.Close();
            }
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        protected void Finalize()
        {
            Dispose(true);
        }

        private void Dispose(bool disposing)
        {
            if (!_disposed)
            {
                if (_trans != null)
                {
                    _trans.Dispose();
                    _trans = null;
                }
                if (_conn != null)
                {
                    _conn.Close();
                    _conn.Dispose();
                    _conn = null;
                }
                _disposed = true;
            }
        }

        #endregion

        #region Transaction

        public SqlTransaction BeginTransaction()
        {
            Open();
            if (_trans == null)
                _trans = _conn.BeginTransaction(IsolationLevel.ReadUncommitted, _innerTransName);
            return _trans;
        }

        public void CommitTransaction()
        {
            if ((_conn.State == ConnectionState.Open) && (_trans != null))
            {
                _trans.Commit();
            }
        }

        public void RollbackTransaction()
        {
            if ((_conn.State == ConnectionState.Open) && (_trans != null))
            {
                _trans.Rollback(_innerTransName);
            }
        }

        public SqlConnection GetConnection()
        {
            return _conn;
        }

        #endregion
    }
}

提前致谢。

【问题讨论】:

  • 有什么理由你认为你可以比连接池做得更好吗?

标签: c# asp.net sql-server connection-string


【解决方案1】:

如果您希望三个连接使用不同的连接/权限,您必须将三个不同的连接字符串添加到您的配置中,并根据一些鉴别器(用户类型等)加载它们

更改代码以使用不同的连接字符串。

但是,如果这是关于并发连接(相同的连接字符串)的问题,您可以依赖 .Net 支持的默认连接池。默认支持多个并发连接。

【讨论】:

  • 我们在全局部分声明的连接。我无法检查这些部件的状况,并且此连接语句应该是静态的。我很难同时满足所有这些条件。一旦我的 DBManager 类被调用,它的连接默认会转到示例中提到的连接。
  • 如果不能根据用户类型动态加载连接字符串,我不知道如何解决这个问题。现在,您的应用程序似乎被硬编码为只能使用一个连接字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
  • 2023-03-20
  • 1970-01-01
  • 2012-07-12
  • 1970-01-01
相关资源
最近更新 更多