Để kiểm tra thời gian chờ, tôi tin rằng bạn kiểm tra giá trị của ex.Number. Nếu nó là -2, thì bạn có một tình huống hết thời gian chờ.
-2 là mã lỗi cho thời gian chờ, được trả về từ DBNETLIB, trình điều khiển MDAC cho SQL Server. Bạn có thể thấy điều này bằng cách tải xuống Reflector và xem trong System.Data.SqlClient.TdsEnums cho TIMEOUT_EXPIRED.
Mã của bạn sẽ đọc:
if (ex.Number == -2)
{
//handle timeout
}
Mã để chứng minh sự thất bại:
try
{
SqlConnection sql = new SqlConnection(@"Network Library=DBMSSOCN;Data Source=YourServer,1433;Initial Catalog=YourDB;Integrated Security=SSPI;");
sql.Open();
SqlCommand cmd = sql.CreateCommand();
cmd.CommandText = "DECLARE @i int WHILE EXISTS (SELECT 1 from sysobjects) BEGIN SELECT @i = 1 END";
cmd.ExecuteNonQuery(); // This line will timeout.
cmd.Dispose();
sql.Close();
}
catch (SqlException ex)
{
if (ex.Number == -2) {
Console.WriteLine ("Timeout occurred");
}
}