mysql连接失败后需要释放_数据库连接释放问题

数据库连接释放问题

“超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。”

c521ac7ef6a7724d7e2be5a195c0136b.png

一看就是数据库连接池满了,应该是打开后没有释放的原因,但是我的Connection对象都使用using及时释放了,怎么会出现这种情况呢?花了很长时间终于到了原因,所以写下来记录一下。

扩展小知识:

--查询数据库的连接情况:(数据库SQL可直接执行)

SELECT [dec].client_net_address,[des].[program_name],[des].[host_name],Count([dec].session_id) ASconnection_countFROM sys.dm_exec_sessions AS [des]

INNER JOIN sys.dm_exec_connections AS [dec]

ON [des].session_id = [dec].session_idGROUP BY [dec].client_net_address,[des].[program_name],[des].[host_name]

ORDER BY [des].[program_name],[dec].[client_net_address]

项目代码:

//创建连接对象的工厂类

public classConnectionFactory

{private static readonly string connString = ConfigurationManager.ConnectionStrings["SQLServerDatabase"].ConnectionString;public staticIDbConnection CreateConnection()

{

IDbConnection conn= newSqlConnection(connString);

conn.Open();returnconn;

}

}//UserInfoDAL类

public classUserInfoDAL:IDAL.IUserInfoDAL

{privateIDbConnection _conn;publicIDbConnection Conn

{get{//工厂实例化一个连接对象

return _conn =ConnectionFactory.CreateConnection();

}

}//根据id获取entity

public UserInfo GetEntity(stringid)

{using(Conn)

{string query = "select * from UserInfo where UserInfo_id = @UserInfo_id";//使用dapper

return userInfo = Conn.Query(query, new { UserInfo_id =id }).SingleOrDefault();

}

}

}

代码基本上就是上面的形式,好像也没有什么不对的地方。下面就来调试一下。

首先创建一个单元测试:

[TestMethod]

public void TestConnectionCount()

{

SQLServerDAL.UserInfoDAL userInfoDAL = new SQLServerDAL.UserInfoDAL();

Model.UserInfo userInfo = userInfoDAL.GetEntity("3");

userInfo = userInfoDAL.GetEntity("3");

userInfo = userInfoDAL.GetEntity("3");

userInfo = userInfoDAL.GetEntity("3");

}

295bcd3acb1fe02363794f252599a842.png

b1dca862da21ca1ea52ca5b6f876754f.png

fbc7f719db3659ac3f245cc05768bff5.png

3c42444696de50813971e19de8ee6889.png

94b3a3290b56c5e6597c5dddee8af9d7.png

612c918106683509ebb21fa0cd9d6dc2.png

bb4ef66bb55529331c07e0fa38a13521.png

4382ecd2430dd37a9593616764b6facc.png

发现原因是因为get的使用不当后,就干脆不用get了,目前的解决方案为:

public classUserInfoDAL:IDAL.IUserInfoDAL

{publicIDbConnection Conn;public UserInfo GetEntity(stringid)

{using (Conn=ConnectionFactory.CreateConnection())

{string query = "select * from UserInfo where UserInfo_id = @UserInfo_id";return Conn.Query(query, new { UserInfo_id =id }).SingleOrDefault();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值