• [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关闭前允许发生的上载秒数

    设置完这两步,我们的问题才算的真正的解决了。

  • 相关阅读:
    【JZOJ4928】【NOIP2017提高组模拟12.18】A
    【JZOJ4922】【NOIP2017提高组模拟12.17】环
    【JZOJ4923】【NOIP2017提高组模拟12.17】巧克力狂欢
    【JZOJ4924】【NOIP2017提高组模拟12.17】向再见说再见
    【JZOJ4919】【NOIP2017提高组模拟12.10】神炎皇
    【JZOJ4920】【NOIP2017提高组模拟12.10】降雷皇
    【JZOJ4921】【NOIP2017提高组模拟12.10】幻魔皇
    【罗宾欺诈者】回环符文——回文树(回文自动机)
    【怪物】KMP畸形变种——扩展KMP
    【51NOD1304】字符串的相似度
  • 原文地址:https://www.cnblogs.com/masonlu/p/10340593.html
Copyright © 2020-2023  润新知