随着数据库数据的不断增大,查询时间也随之增长。而客户端与数据库连接时间以及命令的执行时间都是有限的.默认为30s。
所以在查询数据的时候,程序会出现 “超时时间已到。在操作完成之前超时时间已过或服务器未响应” 异常。
经检查后发现,这是因为页面在读取数据库中的数据时耗时太长,超过了默认的30秒。所以报出了以上错误,解决该问题的方法是:
一,优化
sql语句
,提高查询速度
二,延长sql超时的时间设置
最好的方法当然是第一种了,这才是治本的方法。但sql优化可不是一件简单的活,具体的环境有不同的方法。本章主要看一下如何通过第二种方法来解决问题。
1,首先设置sql的执行超时时间。
如果我们的sql是直接使用SqlCommand对象来执行的,那么可以设置SqlCommand的CommandTimeout属性的值。
比如:
using (SqlCommand cmd = new SqlCommand(SQLString, connection))
{undefined
cmd.CommandTimeout=180
}
这样我们就设置了cmd的超时间时间是180秒。
注意:SqlCommand.CommandTimeout属性的单位为秒,默认值是30。
如果我们的sql是利用SqlDataAdapter对象来获取数据集合,那么我们还可以分别通过以下方法设置SqlCommand的超时时间。
using (SqlConnection connection = GetConnection())
{undefined
……
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关闭前允许发生的上载秒数
设置完这两步,我们的问题才算的真正的解决了。
随着数据库数据的不断增大,查询时间也随之增长。而客户端与数据库连接时间以及命令的执行时间都是有限的.默认为30s。所以在查询数据的时候,程序会出现 “超时时间已到。在操作完成之前超时时间已过或服务器未响应” 异常。经检查后发现,这是因为页面在读取数据库中的数据时耗时太长,超过了默认的30秒。所以报出了以上错误,解决该问题的方法是:一,优化sql语句,提高查询速度二,延长sql超时的时间设置最好的方法当然是第一种了,这才是治本的方法。但sql优化可不是一件简单的活,具体的环境有不同的方法。本章主要
解决办法有以下三种,可以尝试处理,一般可以搞定:
1.原因应该在数据访问有问题,可以把连接
时间
设置长些,在数据库连接字符串,加上Connect Timeout=18000,单位毫秒
2,在web.config中加上以下语句:
<system.web>
<httpRuntime maxRequestLength=”102400″ executionTimeou...
SQL
Server 2012 已成功与
服务器
建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的
操作
过时。
楼主用
SQL
Server 2012 在连接其他电脑的实例时,一直提示“已成功与
服务器
建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的
操作
过时。”
Google了很多资料,综合自己的问题,并参照官方问题介绍:http://support.microsoft.com/kb/2568167
和另外一位仁兄的博客http://
错误信息:
System.NotSupportedException:“The specified LINQ expression contains references to queries that are associated with different contexts.”
不支持的异常:指定的Linq语句包含了来自不同上下文的查询。
原因分析:
不支持跨DbContext查询,例如join两个不同的DbContext。
解决办法:
将其中一个查询结果先转换为本地查询,例如List集合
超时
时间
已到
。在
操作
完成
之前
超时
时间
已过
或
服务器
未
响应
。
说明:
执行
当前 Web 请求期间,出现
未
处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Data.
Sql
Client.
Sql
Exception:
超时
时间
已到
。在
操作
完成
之前
超时
时间
已过
或
服务器
未
响应
。
源错误:...
错误提示:
System.Data.
Sql
Client.
Sql
Exception (0x80131904):
执行
超时
已过期
。
完成
操作
之前
已
超时
或
服务器
未
响应
。
解决方案:
exec sp_updatestats;.
lock.lock;//阻塞式等待。默认加锁的
时间
都是30s
时间
。
1),锁的自动续期,如果业务超长,运行期间自动给锁续上新的30s。不用担心过业务
时间
超长,锁自动过期被删掉。
2),加锁的业务只要运行
完成
,就不会给当前锁续期,即使不手动解锁,默认锁在30s以后自动删除。
lock.lock(10,TimeUnit.SECONDS);//10秒自动解锁,自动解锁
时间
一定要大于业务
执行
的
时间
当我们在
SQL
Server中修改字段时,有时候可能会遇到
超时
的情况。这通常是因为修改所涉及的数据库表格太大,
操作
耗时较长,或者当前数据库的负载较高,导致
服务器
无法及时
响应
。
为了解决这个问题,我们可以采取以下几个方法:
1. 增加
超时
时间
:可以通过更改
SQL
Server Management Studio (SSMS) 中的查询
超时
时间
来解决。默认情况下,SSMS的查询
超时
时间
为30秒,我们可以将其增加到更大的值,如60秒或120秒,在这个
时间
范围内,尝试修改字段。
2. 拆分修改
操作
:如果表格非常大,一次性进行修改可能会导致
超时
。可以将修改
操作
拆分成多个小的
操作
,逐渐修改表格的每一部分。可以使用分页查询、游标或者临时表来实现这个目的。
3. 优化数据库性能:
超时
问题还可能是由于数据库的性能不佳引起的。我们可以通过优化查询、创建索引、减少表的规模等手段来提高数据库的性能,从而减少修改字段时的
超时
问题。
4. 降低数据库负载:如果数据库的负载过高,我们可以尝试调整其他
操作
的优先级,将修改字段的
操作
放在负载较低的时候进行。我们也可以考虑增加
服务器
的资源(如CPU、内存等)来提高数据库的负载能力。
总之,当我们在
SQL
Server中修改字段时遇到
超时
问题,我们可以通过增加
超时
时间
、拆分
操作
、优化性能和降低负载等方法来解决。每个方法的适用性取决于具体情况,我们需要根据实际情况选择最合适的方法来解决
超时
问题。