Windows Server 2008 R2上的连接超时= 0

时间:2014-04-28 10:39:13

标签: c# sql sql-server sql-server-2008

好的,我有一个用C#编写的程序,它通过一系列存储过程调用从SQL Server 2008获取一些信息。 我的连接字符串:

Data Source={0};Initial Catalog={1}; Integrated Security=True; Connection Timeout=0

{0}和{1}由变量填充。
超时为零,因为信息可能很大,可能需要一些时间才能获得。
第一个程序运行平稳并返回其结果,但第二个程序只是停止程序,它永远不会唤醒,它不会冻结,它只是等待查询执行infinetly。有趣的是,当我在我的机器上运行这个程序(Windows 7)一切正常(需要4秒才能执行),但在服务器上(Windows Server 2008 R2),我得到了这种奇怪的行为。我设法将这个不断变化的连接超时解决为其他一些数字,比如15,但问题是为什么?
我的代码:
第一个过程:

public static bool WorkdayCheck(string sp_name, DateTime CheckDate)
{
    SqlConnection conn = new SqlConnection(ConnectionString);
    SqlCommand cmd = new SqlCommand();
    cmd = new SqlCommand(sp_name, conn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandTimeout = 0; //unlimited
    cmd.Parameters.AddWithValue("@checkdate", CheckDate);
    var work = cmd.Parameters.Add("@work", SqlDbType.Bit);
    work.Direction = ParameterDirection.Output;
    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();
    if ((bool)cmd.Parameters["@work"].Value) return true;
    else return false;
}

第二个过程:

static DataTable GetSql(string sp_name, params string[] vars)
{
    SqlConnection.ClearAllPools(); //added this hoping it'd help - it didn't
    DataTable DT = new DataTable();
    SqlConnection conn = new SqlConnection(ConnectionString);
    SqlDataAdapter da = new SqlDataAdapter();
    da.SelectCommand = new SqlCommand(sp_name, conn);
    da.SelectCommand.CommandType = CommandType.StoredProcedure;
    da.SelectCommand.CommandTimeout = 0; //unlimited
    da.SelectCommand.Parameters.AddWithValue("@date_b_d", vars[0]);
    da.SelectCommand.Parameters.AddWithValue("@broker_id_s", vars[1]);
    da.SelectCommand.Parameters.AddWithValue("@dogovor_id_s", vars[2]);
    DataSet ds = new DataSet();
    da.Fill(ds, "orders_list");
    DT = ds.Tables["orders_list"];
    return DT;
}

1 个答案:

答案 0 :(得分:0)

来自MSDN的

    You can set the amount of time a connection waits to time out by using the ConnectTimeout or Connection Timeout keywords in the connection string. 
A value of 0 indicates no limit, and should be avoided in a ConnectionString because an attempt to connect waits indefinitely.

更多信息here