mysql连接字符串 超时_s数据库连接字符串超时的问题

喜欢ヅ旅行 2022-10-31 13:39 694阅读 0赞

错误原因:Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

感谢作者:

今天碰到了一个查询异常问题,上网查了一下,感谢原创和译者

如果你使用的数据库连接类是 the Data Access Application Blocks “SqlHelper” 或者 SqlClient Class , 你在执行一个很费时的SQL 操作时候,可能就会碰到下面的超时异常。

-—————————————

-—————————————

Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

-—————————————

OK

-—————————————

你会说,我在连接字符串中已经 设置了 Connect Timeout=80000 ,并且数据库中超时连接也是设置的值是一个很大的值。为啥到了30秒,仍然超时了呢??

这是因为:

你的设置并没有问题,是你混淆了 SqlCommand.CommandTimeout 和 SqlConnection.ConnectionTimeout 这两个的区别了。

你的连接字符串中的超时只是设置的 SqlConnection.ConnectionTimeout 的值,而不是设置的 SqlCommand.CommandTimeout 的值。

SqlHelper 中并没有 SqlCommand.CommandTimeout 的相关设置。需要你自己设置。

下面是两个的比较:

SqlCommand.CommandTimeout

获取或设置在终止执行命令的尝试并生成错误之前的等待时间。

等待命令执行的时间(以秒为单位)。默认为 30 秒。

SqlConnection.ConnectionTimeout

获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。

等待连接打开的时间(以秒为单位)。默认值为 15 秒。

这个问题可以算是 SqlHelper 设计的时候,一个考虑不周的地方吧。

SqlCommand.CommandTimeout 的默认值是30,对于我写的大多数程序来说,这个值足够了。所以一直都没有发现SqlHelper的这个问题。今天在查本地一台比较差的机子上生成一个超长帖子(近4000个回复)无响应的问题时候,才发现SQLHelper 存在的这个问题。

把command的Timeout属性设置一下就ok了!

![ExpandedBlockStart.gif][]

![ContractedBlock.gif][ExpandedBlockStart.gif]/**![InBlock.gif][ExpandedBlockStart.gif]///执行查询语句,返回DataTable

![InBlock.gif][ExpandedBlockStart.gif]///![InBlock.gif][ExpandedBlockStart.gif]///查询语句![InBlock.gif][ExpandedBlockStart.gif]///设置查询Timeout![ExpandedBlockEnd.gif][ExpandedBlockStart.gif]///用于复杂查询

![None.gif][ExpandedBlockStart.gif]publicstaticDataTable GetDataTable(stringSQLString,intcommTime)

![ExpandedBlockStart.gif][]

![ContractedBlock.gif][ExpandedBlockStart.gif]…{

![InBlock.gif][ExpandedBlockStart.gif]stringconnectionString=System.Configuration.ConfigurationManager.AppSettings[“connectionString”];

![InBlock.gif][ExpandedBlockStart.gif]using(System.Data.SqlClient.SqlConnection connection=newSystem.Data.SqlClient.SqlConnection(connectionString))

![ExpandedSubBlockStart.gif][ExpandedBlockStart.gif]

![ContractedSubBlock.gif][ExpandedBlockStart.gif]…{

![InBlock.gif][ExpandedBlockStart.gif] DataTable dt=newDataTable();

![InBlock.gif][ExpandedBlockStart.gif]try![ExpandedSubBlockStart.gif][ExpandedBlockStart.gif]

![ContractedSubBlock.gif][ExpandedBlockStart.gif]…{

![InBlock.gif][ExpandedBlockStart.gif] connection.Open();

![InBlock.gif][ExpandedBlockStart.gif] System.Data.SqlClient.SqlDataAdapter da=newSystem.Data.SqlClient.SqlDataAdapter();

![InBlock.gif][ExpandedBlockStart.gif] System.Data.SqlClient.SqlCommand comm=newSystem.Data.SqlClient.SqlCommand(SQLString, connection);

![InBlock.gif][ExpandedBlockStart.gif] comm.CommandTimeout=commTime;

![InBlock.gif][ExpandedBlockStart.gif] da.SelectCommand=comm;

![InBlock.gif][ExpandedBlockStart.gif] da.Fill(dt);

![ExpandedSubBlockEnd.gif][ExpandedBlockStart.gif] }![InBlock.gif][ExpandedBlockStart.gif]catch(System.Data.SqlClient.SqlException ex)

![ExpandedSubBlockStart.gif][ExpandedBlockStart.gif]

![ContractedSubBlock.gif][ExpandedBlockStart.gif]…{

![InBlock.gif][ExpandedBlockStart.gif]thrownewException(ex.Message);

![ExpandedSubBlockEnd.gif][ExpandedBlockStart.gif] }![InBlock.gif][ExpandedBlockStart.gif]returndt;

![ExpandedSubBlockEnd.gif][ExpandedBlockStart.gif] }![ExpandedBlockEnd.gif][ExpandedBlockStart.gif] }

[ExpandedBlockStart.gif]:

发表评论

表情:
评论列表 (有 0 条评论,694人围观)

还没有评论,来说两句吧...

相关阅读