none
SQLExceptionのエラーコードについて RRS feed

  • 質問

  • こんにちは。
    教えてください。

    SQLExceptionで

    "タイムアウトに達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。"

    というエラーをキャッチする必要があり、このメッセージのエラーコードを調べています。

     

    エラーコード検索が出来るサイトも見つけたのですが、http://leadtec.net/sample_02/sqlex.aspx 

    上記のメッセージのエラーコードは無さそうです。

     

    ご存知の方、もしくはエラーコード一覧のようなものがあるのでしたら
    ご教授願えますでしょうか。

    よろしくお願いします。

     

    2007年10月18日 10:40

回答

  • これでいいんじゃないでしょうか。

     

    コード ブロック

            static void Main(string[] args)
            {
                SqlConnection cn = new SqlConnection();
                SqlCommand cmd = new SqlCommand();

                cn.ConnectionString = "Data Source=.\\sqlexpress;"

                                      + "Integrated Security=True";
                cmd.CommandText = "WAITFOR DELAY '0:00:03'";
                cmd.CommandTimeout = 1;
                cmd.Connection = cn;            
                cn.Open();


                try
                {
                    cmd.ExecuteNonQuery();
                    Console.Write("Success.");
                }
                catch (SqlException ex)
                {
                    if (ex.Number == -2) // TdsEnums.TIMEOUT_EXPIRED
                    {
                        // timeout
                        Console.WriteLine("タイムアウト");
                    }
                    else
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            }

     

     

     

    リフレクションって便利ですね。このケースはクラス ライブラリが不親切だと思いますけど。
    2007年10月26日 22:51

すべての返信

  • これでいいんじゃないでしょうか。

     

    コード ブロック

            static void Main(string[] args)
            {
                SqlConnection cn = new SqlConnection();
                SqlCommand cmd = new SqlCommand();

                cn.ConnectionString = "Data Source=.\\sqlexpress;"

                                      + "Integrated Security=True";
                cmd.CommandText = "WAITFOR DELAY '0:00:03'";
                cmd.CommandTimeout = 1;
                cmd.Connection = cn;            
                cn.Open();


                try
                {
                    cmd.ExecuteNonQuery();
                    Console.Write("Success.");
                }
                catch (SqlException ex)
                {
                    if (ex.Number == -2) // TdsEnums.TIMEOUT_EXPIRED
                    {
                        // timeout
                        Console.WriteLine("タイムアウト");
                    }
                    else
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            }

     

     

     

    リフレクションって便利ですね。このケースはクラス ライブラリが不親切だと思いますけど。
    2007年10月26日 22:51
  • 回答ありがとうございます。

    エラーコードは -2 でタイムアウトが取得できるのですね。

     

    ありがとうございました。

    活用させていただきます。

    2007年10月29日 12:27