通过C#查询SQLServer数据库超时

生产环境的系统,在查询数据的时候,日志记录数据“Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。”,“等待的操作过时”等,初步判断是因为查询超时导致的,根据源码分析,获取到查询操作的SQL脚本,然后跟踪到查询业务的SQL参数信息,在数据库中查询,发现数据的返回时间小于1s,基本上是实时返回,排除了锁表等操作。
后更改数据查询的超时时间,改成3分钟,系统还是报查询超时。但是程序在测试环境,反复的测试,也没有问题;而且程序昨天是正常的,数据量也没有出现暴增的情况,整体的数据量也不大。
后通过网络查询,发现有重启服务器解决该问题的方法,但是由于是生成环境,没法进行重启服务器,客户在等,很是着急。后在通过万能的网络,查询到,可能是参数化传参导致的,传递参数的SqlDbType和数据库里的类型不一致会导致出现数据库上直接查询,返回数据很快,但是通过程序去查询,会出现查询超时的情况。然后去检查程序和数据库,发现确实不一致,程序中使用的是SqlDbType.VarChar,但是在数据库存储中使用的数据类型是NVarChar。
然后修改程序的SQL语句不是参数化传参,改为拼接的方式,然后发布程序,登录检测,发现程序正常返回数据,这样看来,问题就出现在C#程序中的参数化的参数类型和数据库中的类型不一致导致的。
这个Bug,是个隐藏的Bug,问题不会一直出现,因为程序中这样操作的,不仅仅是这个查询的一处地方。这次的问题比较特殊,做个记录,以备下次查询。

转载于:https://blog.51cto.com/helicon/2336905

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值