データベース接続解除の問題

データベース接続解除の問題

すべてのプールされた接続を使用していたと最大プールサイズに達したためタイムアウトは、タイムアウト期間が満了している。有効期限が切れますが、プールから接続を取得するためには至っていない。これが発生した可能性があります。

外観は、データベース接続プールがいっぱいですそれは、オープンのリリースには、理由はないはずですが、私はどのようにこれが起こるのだろう、タイムリーにリリース使用してConnectionオブジェクトを使用する必要がありますか?それは長い時間がかかったし、最終的理由、その記録、それを書き留めて。

詳細ヒント:

- 接続SQLデータベースクエリデータベース直接実行:()
SELECT  [ 12月] .client_net_address、
 [ DES ][ Program_nameの] [ DES ][ HOST_NAME ] カウント[ 12月] .session_id)AS connection_count
 FROM SYS .dm_exec_sessions AS  [ ] 
INNER  JOIN sys.dm_exec_connections AS  [ 12月オン] 
ON  [ ].session_id =  [ 12月] .session_id
 GROUP  BY  [ 12月] .client_net_address、
 [ DES ][ program_nameの] [ DES ][ HOST_NAME ] 
ORDER  BY  [ ][ program_nameの] [ 12月][ client_net_address ]

 

商品コード:

//连接对象的创建工厂类
パブリック クラスのConnectionFactory 
{ 
  プライベート 静的 読み取り専用 文字列 CONNSTRING = ConfigurationManager.ConnectionStrings [ " SQLServerDatabase " ] .ConnectionString。
  パブリック 静的のIDbConnectionのCreateConnection()
  { 
    のIDbConnection CONN = 新しいSqlConnectionオブジェクト(CONNSTRING)。
    conn.Open(); 
    返すCONN; 
  } 
} 
// UserInfoDAL类
パブリック クラスUserInfoDAL:IDAL.IUserInfoDAL 
{ 
  プライベートのIDbConnection _conn。
  公共のIDbConnectionコネティカット
  { 
    取得
    { 
      // 工厂实例化一个连接对象
      戻る _conn = ConnectionFactory.CreateConnection(); 
    } 
  } 
  // 根据ID获取エンティティ
  公共のUserInfo GetEntity(文字列ID)
  { 
    使用(コネチカット)を
    { 
      文字列クエリは= " UserInfo_id = @UserInfo_idのUserInfo SELECT * FROM " 。
      // 使用Dapperの
      リターンユーザー情報= Conn.Query <のUserInfo>(クエリ、新しい {UserInfo_id = ID})SingleOrDefault()。
    } 
  }
}

 

 

コードは、基本的には上記の形で、それで間違っては何もないようです。ここではそれをデバッグします。
最初のユニットテストを作成します。

【のtestMethod】
公共ボイドTestConnectionCount()
{ 
    SQLServerDAL.UserInfoDAL userInfoDAL =新しいSQLServerDAL.UserInfoDAL()。
    Model.UserInfoユーザー情報= userInfoDAL.GetEntity( "3")。
    ユーザー情報= userInfoDAL.GetEntity( "3")。
    ユーザー情報= userInfoDAL.GetEntity( "3")。
    ユーザー情報= userInfoDAL.GetEntity( "3")。
}

  

 

その理由は、不適切な使用の発見を得るために、彼らは単に現在の解決策を得ることはありませんです。

public class UserInfoDAL:IDAL.IUserInfoDAL
{
    public IDbConnection Conn;
    public UserInfo GetEntity(string id)
    {
        using (Conn=ConnectionFactory.CreateConnection())
        {
        string query = "select * from UserInfo where UserInfo_id = @UserInfo_id";
        return Conn.Query<UserInfo>(query, new { UserInfo_id = id }).SingleOrDefault();
        }
    }
}

 

おすすめ

転載: www.cnblogs.com/MedlarCanFly/p/11302284.html
おすすめ