我有一个代码,用于演示与ServiceStack ORM的简单mysql数据库连接
var dbFactory = new OrmLiteConnectionFactory(DB_CONNECTION_STRING, MySqlDialect.Provider);
var db = dbFactory.Open();
Console.WriteLine(db.State.ToString());
db.Close();
db.Dispose();
结果
Open
但是当我点击SQL命令时
show full processlist;
Id User Host db Command Time State Info Rows_sent Rows_examined
81107052 user1 <111.21.96.32>:51120 my_db Sleep 7 NULL 0 0
81107178 user1 localhost my_db Query 0 init show full processlist 0 0
81107179 user1 localhost my_db Sleep 0 NULL 0 0
具有id 81107052
的进程是从代码执行开始的进程,然后进入休眠状态并且不会被db.Close()终止;
这会在并行应用程序使用时触发<max_connections_reached>
错误。
那么如何关闭连接过程?
答案 0 :(得分:1)
只需使用using语句,即:
using (var db = dbFactory.Open())
{
}
某些RDBMS提供程序将返回与池的连接而不关闭它,但如果所有连接都已正确处理,则无法获得太多的打开连接错误。
答案 1 :(得分:0)
连接字符串
中需要添加Pooling=false