[C#.net]SqlDataAdapter 执行超时已过期 完成操作之前已超时或服务器未响应
作者:互联网
随着数据库数据的不断增大,查询时间也随之增长。而客户端与数据库连接时间以及命令的执行时间都是有限的.默认为30s。
所以在查询数据的时候,程序会出现 “超时时间已到。在操作完成之前超时时间已过或服务器未响应” 异常。
经检查后发现,这是因为页面在读取数据库中的数据时耗时太长,超过了默认的30秒。所以报出了以上错误,解决该问题的方法是:
一,优化sql语句,提高查询速度
二,延长sql超时的时间设置
最好的方法当然是第一种了,这才是治本的方法。但sql优化可不是一件简单的活,具体的环境有不同的方法。本章主要看一下如何通过第二种方法来解决问题。
1,首先设置sql的执行超时时间。
如果我们的sql是直接使用SqlCommand对象来执行的,那么可以设置SqlCommand的CommandTimeout属性的值。
比如:
using (SqlCommand cmd = new SqlCommand(SQLString, connection)) { cmd.CommandTimeout=180 }
这样我们就设置了cmd的超时间时间是180秒。
注意:SqlCommand.CommandTimeout属性的单位为秒,默认值是30。
如果我们的sql是利用SqlDataAdapter对象来获取数据集合,那么我们还可以分别通过以下方法设置SqlCommand的超时时间。
using (SqlConnection connection = GetConnection()) { …… SqlDataAdapter sqlDA = new SqlDataAdapter(); sqlDA.SelectCommand.CommandTimeout = 180;//设置查询sql的超时时间 sqlDA.InsertCommand.CommandTimeout = 180;//设置插入sql的超时时间 sqlDA.UpdateCommand.CommandTimeout = 180;//设置修改sql的超时时间 sqlDA.DeleteCommand.CommandTimeout = 180;//设置删除sql的超时时间 …… }
也许大家在有些网站上看到以下解决方法
1),在数据库的连接字符串中添加超时时间设置,如下:
SqlConnection con = new SqlConnection'server=.;database=myDB;uid=sa;pwd=password;Connect Timeout=180'
但我有测试过,无效,也有可能是我的测试方法错误吧!!!
2),设置SqlConnection对象的超时时间。
该方法是肯定行不通了,因为SqlConnection的ConnectionTimeout属性根本就是个只读属性,不允许设置值。从它的定义就可以看出来了,定义如下:
// //摘要: //获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。 // //返回结果: //等待连接打开的时间(以秒为单位)。默认值为 15 秒。 // // 异常: //System.ArgumentException: //所设置的值小于 0。 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [ResDescription("SqlConnection_ConnectionTimeout")] public override int ConnectionTimeout { get; }
2,设置asp.net请求的超时时间。
在上面的设置中我们有处理了sql的超时时间,但可能你的设置还是无效。这是为什么呢?因为你还没有设置asp.net请求的超时时间。
要如何设置asp.net请求的超时时间呢?修改web.config的httpRunTime节即可,示例如下:
<system.web> <httpRuntime executionTimeout="180" /> </system.web>
其中httpRuntime属性与executionTimeout属性的意思分别如下:
httpRuntime:配置 ASP.NET HTTP 运行时设置,以确定如何处理对 ASP.NET 应用程序的请求。
executionTimeout:设置asp.net关闭前允许发生的上载秒数
设置完这两步,我们的问题才算的真正的解决了。
标签:CommandTimeout,SqlDataAdapter,已过期,180,时间,设置,sql,超时 来源: https://www.cnblogs.com/masonlu/p/10340593.html