[img]http://onexin.iyunv.com/source/plugin/onexin_bigdata/file:///F:QQUsers252701710ImageC2C[R)(F8H3IKU(@43DQ[32YWO.png[/img][img]http://onexin.iyunv.com/source/plugin/onexin_bigdata/file:///C:DOCUME~1ADMINI~1LOCALS~1Temp8LDO48C$8@[GWU0353$FOVS.png[/img](1) 数据库的连接使用后,必须采用close()连接等效的方法关闭连接。只有关闭后,连接才能进入连接池。 参见微软的使用连接池说明:https://msdn.microsoft.com/zh-cn/library/8xx3tyca(v=vs.80).aspx
“警告:
我们建议您在使用完连接时一定要关闭连接,以便连接可以返回池。要关闭连接,可以使用 Connection 对象的 Close 或 Dispose 方法,也可以通过在 C# 的 using 语句中或在 Visual Basic 的 Using 语句中打开所有连接。不是显式关闭的连接可能不会添加或返回到池中。例如,如果连接已超出范围但没有显式关闭,则仅当达到最大池大小而该连接仍然有效时,该连接才会返回到连接池中。有关更多信息,请参见 Visual Basic 的using 语句(C# 参考)或如何:释放系统资源。”
A.方法1(C#):
using (SqlConnection connection = new SqlConnection()) {
connection.ConnectionString = connectionString;
connection.Open();
//读写操作............................
//此处不用显示关闭连接,因为using语法会关闭连接
}
B.方法2(C#):
SqlConnection connection = new SqlConnection();
connection.ConnectionString = connectionString;
connection.Open();
............................
connection.Close();
C.方法3(C#利用读数据时):
SqlConnection connection = new SqlConnection(ConnectionString);
string _sql = "Select * from [Data] where ......;
SqlCommand _cmd = new SqlCommand(_sql, connection);
connection.Open();
SqlDataReader _reader = _cmd.ExecuteReader(CommandBehavior.CloseConnection);//此处读取完成后关闭读取时关闭对应连接
............................
_reader.Close();//此处必须显示关闭读取,这样才能配合CommandBehavior.CloseConnection关闭对应的连接
(2)与数据库尝试连接的时间与数据库连接通信超时时间Connection Timeout ,默认15S。
(3)控制连接是否进入连接池
SqlConnection.ConnectionString 属性详细见https://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlconnection.connectionstring(v=vs.80).aspx
是否使能池程序在创建线程的当前事务上下文中自动登记连接 Enlist,是否从连接池取连接或创建新连接后存入合适的连接池Pooling,连接池最大最小值Max Pool Size,Min Pool Size
例如: ConnectionString = "Data Source=(local);Initial Catalog=AdventureWorks;" + "Integrated Security=SSPI;";
关闭连接池 "Enlist=false;" "Pooling=false;" ,即为:
ConnectionString=ConnectionString+"Enlist=false;"+"Pooling=false;"
(3) 连接进入连接池后,以下关键字在数据库连接时才起作用 。
SqlConnection.ConnectionString 属性Connection Lifetime,设置连接池中的连接在连接池中的存储并销毁时间 。
(4)如果不想让连接进入连接池(即可能存在连接池打开的情况,不通过"Pooling=false;"设置),可采用在程序中对使用的连接采用如下方法让连接使用完成后不会进入连接池 :
SqlConnection.ClearPool(connection);
此方法可以解决数据库连接中sleeping进程过多 的问题。
参见:https://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlconnection.clearpool(v=vs.80).aspx
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com