在操作完成之前经过的超时时间,或者即使连接超时= 0,服务器也没有响应

本文关键字:超时 连接 服务器 响应 或者 经过 时间 操作 | 更新日期: 2023-09-27 18:16:05

我有一个查询,必须做一个开放的行集到远程服务器(通过卫星)我把我的时间设置为0,"是的,我知道不应该这样做。"我在SSMS中运行我的查询,它可以从3分钟到1.5小时返回任何地方。"是的,我知道"但事实就是如此。我做了所有的sql后端优化…执行计划……

所以我在SSMS中运行一个查询需要5分钟。没问题,但当我在应用程序中运行它以填充我的DS时,我得到"超时时间.......",即使我的连接超时设置为0

string connString = ("server = " + _SourceVal + "; user id = myid;
 password = mypw; database = mydb;Connection Timeout=0");

所以在我的代码中加入一个时间检查,它只运行34-35秒,然后就会掉入异常

Console.WriteLine (DateTime。Now + "Start");

        try
        {
            conn.Open();
            da.Fill(ds);
            conn.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine(DateTime.Now + "end");
            MessageBox.Show("error with the findingMisMatch " + e.Message);
        }
        return ds;
结果

11/2/2016 2:34:00 PMStart线程"(0x1944)"已退出,代码为0 (0x0)。类型为"System.Data.SqlClient"的第一次机会异常。在System.Data.dll中发生SqlException'11/2/2016 2:34:35

在操作完成之前经过的超时时间,或者即使连接超时= 0,服务器也没有响应

您必须增加CommandTimeout,默认为30秒。在你的例子中,你可以设置为0表示无限。

以下是来自MSDN的示例:[https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout(v=vs.110).aspx]

using System;
using System.Data.SqlClient;
/// 
public class A {
   /// 
   public static void Main() {
      string connectionString = "";
      // Wait for 5 second delay in the command
      string queryString = "waitfor delay '00:00:05'";
      using (SqlConnection connection = new SqlConnection(connectionString))     {
         connection.Open();
         SqlCommand command = new SqlCommand(queryString, connection);
         // Setting command timeout to 1 second
         command.CommandTimeout = 1;
         try {
            command.ExecuteNonQuery();
         }
         catch (SqlException e) {
            Console.WriteLine("Got expected SqlException due to command     timeout ");
            Console.WriteLine(e);
         }
      }
   }
}