摘要:完美主义,强迫症患者,从事流程工厂数字化建设相关工作,平时比较喜欢鼓捣电脑硬件,网络设备,看美剧动漫,此公众号是本人博客的映射,记录生活感悟,分享专业技术,关注行业动态,更多内容请登陆我的博客:https://mrgeng.com
以下文章来源于MrGeng ,作者Leon Geng
MrGeng.
完美主义,强迫症患者,从事流程工厂数字化建设相关工作,平时比较喜欢鼓捣电脑硬件,网络设备,看美剧动漫,此公众号是本人博客的映射,记录生活感悟,分享专业技术,关注行业动态,更多内容请登陆我的博客:https://mrgeng.com
问题描述:
在.NET开发中用到一些Sql查询,从SSMS里测试同样的语句能查出结果,但在代码里使用SqlClient运行Command,就显示TimeOut超时错误。
解决方案
我们也都知道优化查询逻辑,减少运行时间是最先考虑的。但对大多数人而言,这个SQL查询的优化工作是很困难的,尤其是像面对Intergraph Smart 3D这种复杂的关系型数据库,把查询写出来已经算很不错了。而且用户面对的大多都是视图,优化的建议一般是从表来分析的。即便是现在有了AI,也爱莫能助。
StackOverflow上有大神给出的方法,运行Command之前,先更新一下统计信息可解决一部分情形。
//更新统计信息,避免数据不一致using (SqlCommand cmd = new SqlCommand("exec sp_updatestats", conn)){ cmd.CommandType = CommandType.Text; await cmd.ExecuteNonQueryAsync;}
还有一点要注意的,最好是结合前面更新统计信息一起来。设置SqlCommand的超时时间,默认为30秒,而稍微复杂一点的查询都不止30秒。
//修改SqlCommand的默认超时时间using (SqlCommand cmd = new SqlCommand(sql, conn)){ // 设置命令的超时时间为 600 秒 cmd.CommandTimeout = 600;}
这个查询的时间一长,需要考虑的事情就更多了,程序是否需要做异步设计,是否要设计等待窗口,是否要设计实时状态更新等等。
本次分享到此为止。
—END—
来源:海智侃事