好的,我有一个用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;
}
答案 0 :(得分:0)
:
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