zoukankan      html  css  js  c++  java
  • 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了

     1 /// <summary>
     2     /// 执行查询语句,返回DataTable
     3     /// </summary>
     4     /// <param name="SQLString">查询语句</param>
     5     /// <param name="commTime">设置查询Timeout</param>
     6     /// <returns>用于复杂查询</returns>
     7     public static DataTable GetDataTable(string SQLString,int commTime)
     8     {
     9         string connectionString = System.Configuration.ConfigurationManager.AppSettings["connectionString"];
    10         using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(connectionString))
    11         {
    12             DataTable dt = new DataTable();
    13             try
    14             {
    15                 connection.Open();
    16                 System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter();
    17                 System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand(SQLString, connection);
    18                 comm.CommandTimeout = commTime;
    19                 da.SelectCommand = comm;
    20                 da.Fill(dt);
    21             }
    22             catch (System.Data.SqlClient.SqlException ex)
    23             {
    24                 throw new Exception(ex.Message);
    25             }
    26             return dt;
    27         }
    28     }
    View Code
  • 相关阅读:
    cssmagic/action js
    sublime Text快捷键
    CSS3动画整理
    有个名字叫随便乱记——JS
    读取Excel文件中的单元格的内容和颜色
    在Windows下利用php自带的mail函数发邮件
    装个Redmine真是麻烦啊
    MVC的项目使用html编辑器UEditorMINI
    数锐科技新网站上线
    本来运行的好的Ajax.dll怎么突然不起作用了
  • 原文地址:https://www.cnblogs.com/cpcpc/p/3702542.html
Copyright © 2011-2022 走看看