昨天一个WINFORM项目的程序出现查询超时的异常,报错如下:
处理过程如下:
1、根据以往经验,创建索引。但是在主要查询语句用到的几个列上创建组合索引后,问题并未解决;
2、在连库字符串中加入连接超时的配置信息:Connect Timeout=600,这里的单位是秒,如果设置成0,表示不限制,未能解决;
有的资料上说需要在<connectstring>配置信息中加入ProviderName="System.Data.SqlClien"超时配置才管用,因为之前的连库串用的不是<connectstring>,所以也没有加;
3、后来经过测试,存储过程的执行在数据库里执行的时间只有11秒,但是在页面上执行了30秒左右就会弹出超时报错提示;因此,考虑应该是调用过程出的问题,按WEB服务超时的思路,搜到如下方法,在Web.config文件中加入:
C# 控制连接超时 - 无恨星晨 - 博客园
https://www.cnblogs.com/weixing/p/5512496.html
连接超时分为三种:
1、TCP Connection to SQL Server
2、SqlConnection.Open
3、 SqlCommand.Execute
第一种不太好控制,文章中相关的解决方法;
第二种是创建连接时的超时,连库字符串中的超时其实是这一种,因此那个Connect Timeout其实只是对连接超时起作用,按文章所说,3秒足够;
第三种是执行语句的超时,按文章所说是最简单的,只要设置SqlCommand的.CommandTimeout属性就可以。
因为我的程序架构有些乱,所以专门写了一个直接使用SqlCommand访问数据库的方法,并设置了CommandTimeout属性,再次执行程序,在一个较长的等待后,结果出来了,问题解决。
当然,还是不够完美,等待的时间有点长,可能是因为查义时没有任何限制条件的原因吧。