C# 什么会导致从池中获取SQL连接超时?

C# 什么会导致从池中获取SQL连接超时?,c#,iis-7,sql-server-2012,C#,Iis 7,Sql Server 2012,我在IIS下部署了一个web应用程序。它一直在出现超时错误,我相信我已经找到了问题的根源,那就是没有正确处理SQL连接的代码 这将需要大量的手术来修复,因此至少在我能够正确使用和块完成新代码的实现和测试之前,我决定将连接池的大小增加到天文数字。但这似乎没有什么帮助。我的连接字符串是: 数据源=MyServer;初始目录=MyDb;用户ID=MyUser;密码=MyPwd;最大池大小=10000 我的日志文件显示: System.InvalidOperationException:超时已过期。从池

我在IIS下部署了一个web应用程序。它一直在出现超时错误,我相信我已经找到了问题的根源,那就是没有正确处理SQL连接的代码

这将需要大量的手术来修复,因此至少在我能够正确使用
块完成新代码的实现和测试之前,我决定将连接池的大小增加到天文数字。但这似乎没有什么帮助。我的连接字符串是:

数据源=MyServer;初始目录=MyDb;用户ID=MyUser;密码=MyPwd;最大池大小=10000

我的日志文件显示:

System.InvalidOperationException:超时已过期。从池中获取连接之前经过的超时时间。发生这种情况的原因可能是所有池连接都在使用中,并且已达到最大池大小

在这段时间里,我一直保持Performance Monitor的开放状态,用户连接的最大数量约为150个。所以我不认为我们的连接已经用完了


还有什么可能导致此错误?

不幸的是,SqlCommand不遵守ConnectionString或SqlConnection的超时。而且必须手动设置。这是因为连接字符串中提到的超时用于连接,而不是执行。所以请考虑用代码设置它的超时时间。< /P>
var conn = new SqlConnection(cs);
var cmd = conn.CreateCommand();
cmd.CommandTimeout = conn.ConnectionTimeout;
...

不幸的是,SqlCommand不遵守ConnectionString或SqlConnection的超时。而且必须手动设置。这是因为连接字符串中提到的超时用于连接,而不是执行。所以请考虑用代码设置它的超时时间。< /P>
var conn = new SqlConnection(cs);
var cmd = conn.CreateCommand();
cmd.CommandTimeout = conn.ConnectionTimeout;
...

您可能正在最大限度地使用连接—可能是在服务器端。您确实需要确保连接关闭,并且只保持尽可能少的打开状态。@Oded-我认为SQL server最多可以支持32768个连接?还是我在做梦?好吧,如果你配置它(服务器和数据库)@Shaul:-请检查你在哪里指定了连接设置超时字段???“集成安全=SSPI;服务器=你的服务器;数据库=你的数据库名称;最小池大小=5;最大池大小=10000;连接超时=60;“@Rahultripath-我想我知道你的意思,连接池要求连接字符串相同。但是,如果它们不相同,那只会导致更多的连接池,而不是更少,不是吗?您可能正在最大限度地使用连接—可能是在服务器端。您确实需要确保连接关闭,并且只保持尽可能少的打开状态。@Oded-我认为SQL server最多可以支持32768个连接?还是我在做梦?好吧,如果你配置它(服务器和数据库)@Shaul:-请检查你在哪里指定了连接设置超时字段???“集成安全=SSPI;服务器=你的服务器;数据库=你的数据库名称;最小池大小=5;最大池大小=10000;连接超时=60;“@Rahultripath-我想我知道你的意思,连接池要求连接字符串相同。但如果它们不相同,那只会导致更多的连接池,而不是更少,不是吗?