c# - 在从池中获取连接之前经过的超时时间

标签 c# mysql sql

我得到了错误:

error connecting: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.

每当我在浏览器中等待响应很长时间后停止 IIS 时,它就会出现。如果我试图等待,那么我得到的错误是 An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll 但我得到的错误是很老的。我只是写了一个没有任何异常的新命令。 [我认为第一个运行错误首先得到错误,所以所有新错误永远不会给出异常]。

那么我需要做什么来解决这个问题。

最佳答案

错误表示连接池没有连接。通常的原因是使用后忘记关闭连接,例如:

var con = new MySqlConnection("Server=YourDB;Database=YourDb;...");
con.Open();
var com = con.CreateCommand();
com.CommandText = "select * from YourTable";

此代码忘记关闭连接,因此池中的连接少了一个。您可以通过添加以下内容来解决此问题:

con.Close();

最后。但如果查询抛出异常,Close 将被跳过,你仍然断开 1 个连接。

一个更好的方法是 using 语句:

using (var con = new MySqlConnection("Server=YourDB;Database=YourDb;..."))
{
    con.Open();
    var com = con.CreateCommand();
    com.CommandText = "select * from YourTable";
}

您可以通过在连接字符串末尾添加 max pool size 轻松解决此问题,例如:

Server=YourDB;Database=YourDbUid=YourUser;Pwd=YourPwd;max pool size=1;

这为您提供 1 的池大小,如果您忘记释放一个连接,则会立即触发错误条件。

关于c# - 在从池中获取连接之前经过的超时时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5441946/

相关文章:

c# - 异步方法导致应用程序崩溃

php - SQL 和 CodeIgniter

mysql - INSERT 批处理,如果在 codeigniter 中有重复键更新

sql - 向现有表添加新列,其值等于 ID

c# - 从列表中删除项目的最佳方法

c# - 如何显示 Assets 文件夹中的 XAML 格式图像?

c# - Web API 发布反序列化 json 结果但所有属性为空

php - 如何在php中生成从F-00001开始的唯一tag_id

sql - 在 SQL Server 上逐字使用 SOUNDEX()

mysql - 基于列值的条件 JOIN