Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.【转】

今天碰到了一个查询异常问题,上网查了一下,感谢原创和译者

如果你使用的数据库连接类是 the Data Access Application Blocks "SqlHelper" 或者 SqlClient
Class , 你在执行一个很费时的SQL 操作时候,可能就会碰到下面的超时异常。

---------------------------

---------------------------
Timeout expired.  The timeout period
elapsed prior to completion of the operation or the server is not
responding.
---------------------------
OK   
---------------------------

你会说,我在连接字符串中已经 设置了 Connect Timeout=80000
,并且数据库中超时连接也是设置的值是一个很大的值。为啥到了30秒,仍然超时了呢??

这是因为:
你的设置并没有问题,是你混淆了  SqlCommand.CommandTimeout  和
SqlConnection.ConnectionTimeout 这两个的区别了。
你的连接字符串中的超时只是设置的
SqlConnection.ConnectionTimeout 的值,而不是设置的 SqlCommand.CommandTimeout
的值。
SqlHelper 中并没有 SqlCommand.CommandTimeout 的相关设置。需要你自己设置。

下面是两个的比较:

SqlCommand.CommandTimeout
获取或设置在终止执行命令的尝试并生成错误之前的等待时间。
等待命令执行的时间(以秒为单位)。默认为
30 秒。

SqlConnection.ConnectionTimeout
获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。
等待连接打开的时间(以秒为单位)。默认值为
15 秒。

一些更详细的对这个问题的描述看:
http://www.eggheadcafe.com/PrintSearchContent.asp?LINKID=357

这个问题可以算是 SqlHelper 设计的时候,一个考虑不周的地方吧。
SqlCommand.CommandTimeout
的默认值是30,对于我写的大多数程序来说,这个值足够了。所以一直都没有发现SqlHelper的这个问题。今天在查本地一台比较差的机子上生成一个超长帖子(近4000个回复)无响应的问题时候,才发现SQLHelper
存在的这个问题。

把command的Timeout属性设置一下就ok了!

 /// <summary>
    /// 执行查询语句,返回DataTable
    /// </summary>
    /// <param name="SQLString">查询语句</param>
    /// <param name="commTime">设置查询Timeout</param>
    /// <returns>用于复杂查询</returns>
    public static DataTable GetDataTable(string SQLString,int commTime)
    {
        string connectionString = System.Configuration.ConfigurationManager.AppSettings["connectionString"];
        using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(connectionString))
        {
            DataTable dt = new DataTable();
            try
            {
                connection.Open();
                System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter();
                System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand(SQLString, connection);
                comm.CommandTimeout = commTime;
                da.SelectCommand = comm;
                da.Fill(dt);
            }
            catch (System.Data.SqlClient.SqlException ex)
            {
                throw new Exception(ex.Message);
            }
            return dt;
        }
    }

Timeout expired. The timeout period elapsed prior to completion
of the operation or the server is not responding.【转】,布布扣,bubuko.com

Timeout expired. The timeout period elapsed prior to completion
of the operation or the server is not responding.【转】

时间: 2024-10-12 10:15:53

Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.【转】的相关文章

Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

今天碰到了一个查询异常问题,上网查了一下,感谢原创和译者 如果你使用的数据库连接类是 the Data Access Application Blocks "SqlHelper" 或者 SqlClient Class , 你在执行一个很费时的SQL 操作时候,可能就会碰到下面的超时异常. --------------------------- ---------------------------Timeout expired.  The timeout period elapsed

[bug]Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding

写在前面 在mysql中这个异常是非常常见的,超时分为连接超时和执行超时,而连接超时,大部分原因是网络问题,或客户端到服务端的端口问题造成. bug场景 有的时候,使用MySqlDataReader在读取数据的时候,datareader的特性是在在线读取,而且是一条一条往下读,也就是只进式读取.如果数据非常多,就会造成超时的问题. 这种超时是执行超时引起的. SqlCommand.CommandTimeout 获取或设置在终止执行命令的尝试并生成错误之前的等待时间. 等待命令执行的时间(以秒为单

Timeout expired. The timeout period elapsed prior to completion of the operation or the server...

问题: 最近程序总会抛出如下异常: An exception of type'System.Data.SqlClient.SqlException' occurred and was caught. ---------------------------------------------------------------------------------- Type :System.Data.SqlClient.SqlException, System.Data, Version=4.0.

SSRS 2008 R2 错误:Timeout expired. The timeout period

今天遇到了Reporting Services(SQL SERVER 2008 R2)的报表执行异常情况,报表加载数据很长时间都没有响应,最后报"An error occurred within the report server database.  This may be due to a connection failure, timeout or low disk condition within the database.;".检查C:\Program Files\Micro

SQLSERVER:Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.

1.Max Pool Size 默认为100. 2.查看当前数据库连接数量, select * from sysprocesses where dbid= db_id('数据库名称') 结果为190, 3.添加数据库查询的最大连接数量 Data Source=.;Initial Catalog=i_Master;Persist Security Info=True;User ID=NUser;Password=N2;max pool size=500设置最大连接数量 500 原文地址:https

SqlException:ConnectionTimeout Expired. The timeout period elapsed during the post-login phase

linux系统部署.netcore程序后,访问某台sqlserver 2008 R2数据库 Connection Timeout Expired. The timeout period elapsed during the post-login phase. The connection could have timed out while waiting for server to complete the login process and respond; Or it could have

Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置

参考数据库链接串: <add key="data" value="server=192.168.1.123; Port=3306; uid=root; pwd=root;database=data;pooling=true;min pool size=5;max pool size=512;connect timeout = 20; "/> 查看应用程序池占用数量: select * from sysprocesses where dbid= db_id

Oracle中的ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

向某个数据库用户中插入.更新.删除一个表的数据,或是增加一个表的主键.索引时,出现下面的错误: ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired 这是因为有事务正在进行或是事务已经被锁,因此导致不成功 1)用dba权限的用户查询数据库中有哪些锁 select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1

Connection Timeout和Command Timeout

原文:Connection Timeout和Command Timeout 每次对数据库连接时,我们有时候会碰到连接超时或者命令超时,这两个超时是不一样的.以ADO.NET为例,当客户端和服务器端连接时,碰到的超时情况主要有下面几种: 当从连接池获取一个连接时,碰到超时. 当建立一个全新连接(而不是从连接池获取)时,碰到超时. 当发送一个命令(command)到SQL Server时,超时. 当发送命令(连接字符串带有"context connection=true"属性)到SQL S