2014-01-21 113 views
0

我有一個建立與sql server連接的類。現在我想連接我的應用程序與3個連接各自的用戶訪問我的應用程序。我如何能夠與這個類一起實現。多個SQL Server連接到我的ASP.NET Web應用程序

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 
    } 
} 

在此先感謝。

+1

有什麼理由讓你覺得你可以做得比連接池更好嗎? –

回答

1

如果你想在三個連接使用不同的連接/權限,你有三種不同的連接字符串添加到您的配置,並根據一些鑑別(用戶類型等)

更改代碼的工作加載它們不同的連接字符串

但是,如果這是關於併發連接的問題(相同的連接字符串),則可以依賴.Net支持的默認連接池。它默認支持許多併發連接。

+0

我們在全局部分聲明的連接。我無法檢查這些部分的條件,並且此連接語句應該是靜態的。我有問題一起滿足所有這些條件。一旦我的DBManager類被調用,默認情況下其連接將轉到如示例中所述的連接。 – user3205585

+0

我看不到如何能夠根據用戶類型動態加載連接字符串來解決這個問題。現在你的應用程序似乎很難編碼,只能使用一個連接字符串。 – TGH

相關問題