生产环境的系统,在查询数据的时候,日志记录数据“Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。”,“等待的操作过时”等,初步判断是因为查询超时导致的,根据源码分析,获取到查询操作的SQL脚本,然后跟踪到查询业务的SQL参数信息,在数据库中查询,发现数据的返回时间小于1s,基本上是实时返回,排除了锁表等操作。
后更改数据查询的超时时间,改成3分钟,系统还是报查询超时。但是程序在测试环境,反复的测试,也没有问题;而且程序昨天是正常的,数据量也没有出现暴增的情况,整体的数据量也不大。
后通过网络查询,发现有重启服务器解决该问题的方法,但是由于是生成环境,没法进行重启服务器,客户在等,很是着急。后在通过万能的网络,查询到,可能是参数化传参导致的,传递参数的SqlDbType和数据库里的类型不一致会导致出现数据库上直接查询,返回数据很快,但是通过程序去查询,会出现查询超时的情况。然后去检查程序和数据库,发现确实不一致,程序中使用的是SqlDbType.VarChar,但是在数据库存储中使用的数据类型是NVarChar。
然后修改程序的SQL语句不是参数化传参,改为拼接的方式,然后发布程序,登录检测,发现程序正常返回数据,这样看来,问题就出现在C#程序中的参数化的参数类型和数据库中的类型不一致导致的。
这个Bug,是个隐藏的Bug,问题不会一直出现,因为程序中这样操作的,不仅仅是这个查询的一处地方。这次的问题比较特殊,做个记录,以备下次查询。
在花垣等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计制作、成都网站建设 网站设计制作按需求定制开发,公司网站建设,企业网站建设,品牌网站设计,成都全网营销,外贸网站制作,花垣网站建设费用合理。
新闻名称:通过C#查询SQLServer数据库超时
转载来源:http://lswzjz.com/article/piicee.html