sql >> データベース >  >> RDS >> Sqlserver

SQLServerタイムアウト例外をキャッチする方法

    タイムアウトを確認するには、ex.Numberの値を確認すると思います。 -2の場合、タイムアウト状態になります。

    -2は、SQLServerのMDACドライバーであるDBNETLIBから返されるタイムアウトのエラーコードです。これは、Reflectorをダウンロードし、System.Data.SqlClient.TdsEnumsでTIMEOUT_EXPIREDを確認することで確認できます。

    コードは次のようになります:

    if (ex.Number == -2)
    {
         //handle timeout
    }
    

    失敗を示すコード:

    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");
        }
    }
    


    1. ORACLEのスリープ機能

    2. 末尾にスペースがある値と一致するSQLWHERE句

    3. SQL常時オン可用性グループ:コンピューターオブジェクト

    4. SELECT GROUP BYを挿入:式エラーよりも多くのターゲット列