C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.13607 の関連記事表示

<< 0 >>
■13607  接続エラーの原因及び処置方法
□投稿者/ NORTH -(2008/01/31(Thu) 21:06:28)

    分類:[VB.NET/VB2005] 

    SQLサーバー2005
    VB.NET


    販売管理システムの起動で最初ログイン画面を表示するのですが、20回に1回ぐらい
    の割合で接続エラーになります。
    プログラムは下記の通りです。
    原因はたまたまタイミングが悪いからなんでしょうか?
    LAN環境はVPN接続(ルータ有)と社内LAN(ルータ無し)の2種類ですが
    VPN接続環境で時々エラーが出るようです。
    原因がわかれば教えて下さい。
    また、わからない場合は2回程リトライしようと思っているのですが、下記の
    Openメッソッドでループ処理をしたいのですが、書き方がわかりません。
    わかる方教えて下さい。
    Openメッソッドの中に記述して下さい。
    (ログイン画面でループするのはNG。他にも同じようなPGがたくさんあるため)



    DB接続プログラム
    Public Function Open() As Boolean

    Dim blnRet As Boolean = False
    Try
    Select Case Mode
    Case 0, 1
    Command = Connection.CreateCommand
    Command.Connection = Connection
    DataAdapter = New SqlDataAdapter(Command)
    DataAdapter.SelectCommand = Command
    Connection.Open()
    IsOpen = True
    Case 1
    Case 2
    End Select
    blnRet = True
    Catch ex As SqlException
    If ex.ErrorCode = -2146232060 Then
    Select Case Mode
    Case 0, 1
    Command = Nothing
    DataAdapter = Nothing
    Connection = Nothing
    IsOpen = False
    Case 1
    Case 2
    End Select
    MessageBox.Show("接続に失敗しました1。再度クリックして下さい。", MessageTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    'Throw ex
    KillMe()
    End If
    Catch ex As Exception
    Select Case Mode
    Case 0, 1
    Command = Nothing
    DataAdapter = Nothing
    Connection = Nothing
    IsOpen = False
    Case 1
    Case 2
    End Select
    MessageBox.Show("接続に失敗しました2。再度クリックして下さい。", MessageTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    'Throw ex
    KillMe()
    Finally
    Open = blnRet
    End Try

    End Function



    ログイン画面起動プログラム
    Public Sub Main()

    Try
    If Not ClsCommonChk.FncRepertStart(Process.GetCurrentProcess) Then
    End
    End If

    PRG_ID_C = My.Application.Info.AssemblyName

    param.Param.PRG_ID_C = PRG_ID_C
    param.Param.Para1 = "#"
    param.Param.Para2 = "#"
    param.Param.Para3 = "#"
    param.Param.Para4 = "#"
    param.Param.Para5 = "#"

    If ClsParameter.GetConfig(Application.StartupPath) Then
    clsDB = New ClsDataBase(ClsParameter.ConnectionString)
    clsDB.Open()
    clsMsg = New ClsMessage(clsDB, param)
    clsExclusive = New ClsExclusive(clsDB)

    Application.EnableVisualStyles()
    Application.Run(ログイン)
    Else
    MessageBox.Show("AAA.xmlが見つかりません。", MessageTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    End If
    Catch ex As Exception
    MessageBox.Show(ex.Message, MessageTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    Finally
    If clsDB.IsOpen Then
    clsDB.Close()
    End If
    clsDB = Nothing
    clsMsg = Nothing
    End Try

    End Sub
親記事 /過去ログ29より / 関連記事表示
削除チェック/

■13620  Re[1]: 接続エラーの原因及び処置方法
□投稿者/ 七曜 -(2008/01/31(Thu) 23:19:23)
    No13607 (NORTH さん) に返信
    > 販売管理システムの起動で最初ログイン画面を表示するのですが、20回に1回ぐらい
    > の割合で接続エラーになります。
    > プログラムは下記の通りです。
    > 原因はたまたまタイミングが悪いからなんでしょうか?
    > LAN環境はVPN接続(ルータ有)と社内LAN(ルータ無し)の2種類ですが
    > VPN接続環境で時々エラーが出るようです。
    > 原因がわかれば教えて下さい。
    
    例外の中身を見てみないとなんとも・・・。
    
    > また、わからない場合は2回程リトライしようと思っているのですが、下記の
    > Openメッソッドでループ処理をしたいのですが、書き方がわかりません。
    
            Const RETRY_MAX As Integer = 2
    
            Dim open As Boolean = False
            Dim retry As Integer = 0
    
            While ((Not (open)) And (retry < RETRY_MAX))
                Try
                    '   処理が成功したらフラグを立てる(ここではリトライさせるのでコメントアウトしておきます。)
                    '   open = True
                    '   サンプルなので強制的に例外を発生させます。
                    Throw New ApplicationException("サンプル例外")
    
                Catch ex As Exception
                    If (retry < RETRY_MAX) Then
                        retry += 1
                        '   リトライ時にしておきたい処理
                        MessageBox.Show(String.Format("{0}回目", retry))
                    Else
                        '   リトライ回数を超えた時にしておきたい処理
                    End If
                End Try
            End While
    
記事No.13607 のレス /過去ログ29より / 関連記事表示
削除チェック/

■13627  Re[2]: 接続エラーの原因及び処置方法
□投稿者/ NORTH -(2008/02/01(Fri) 00:12:59)
    No13620 (七曜 さん) に返信
    > ■No13607 (NORTH さん) に返信
    >>販売管理システムの起動で最初ログイン画面を表示するのですが、20回に1回ぐらい
    >>の割合で接続エラーになります。
    >>プログラムは下記の通りです。
    >>原因はたまたまタイミングが悪いからなんでしょうか?
    >>LAN環境はVPN接続(ルータ有)と社内LAN(ルータ無し)の2種類ですが
    >>VPN接続環境で時々エラーが出るようです。
    >>原因がわかれば教えて下さい。
    >
    > 例外の中身を見てみないとなんとも・・・。
    >
    >>また、わからない場合は2回程リトライしようと思っているのですが、下記の
    >>Openメッソッドでループ処理をしたいのですが、書き方がわかりません。
    >
    > Const RETRY_MAX As Integer = 2
    >
    > Dim open As Boolean = False
    > Dim retry As Integer = 0
    >
    > While ((Not (open)) And (retry < RETRY_MAX))
    > Try
    > ' 処理が成功したらフラグを立てる(ここではリトライさせるのでコメントアウトしておきます。)
    > ' open = True
    > ' サンプルなので強制的に例外を発生させます。
    > Throw New ApplicationException("サンプル例外")
    >
    > Catch ex As Exception
    > If (retry < RETRY_MAX) Then
    > retry += 1
    > ' リトライ時にしておきたい処理
    > MessageBox.Show(String.Format("{0}回目", retry))
    > Else
    > ' リトライ回数を超えた時にしておきたい処理
    > End If
    > End Try
    > End While
    >

    早速の回答ありがとうございます。
    サンプルプログラムを参考にして、試してみます。
    一般的にやはりSQLサーバーへの接続処理はリトライ処理を
    いれるものなのでしょうか?
    それとも、原因を究明しリトライなんかしなくてもうまくいくように
    するべきなのでしょうか?


    原因についてなんですが、例外の中身とは、何を調べればいいんでしょうか?
    教えて下さい。
記事No.13607 のレス /過去ログ29より / 関連記事表示
削除チェック/

■13658  Re[3]: 接続エラーの原因及び処置方法
□投稿者/ 七曜 -(2008/02/01(Fri) 10:53:01)
    2008/02/01(Fri) 10:54:06 編集(投稿者)

    No13627 (NORTH さん) に返信
    > 原因についてなんですが、例外の中身とは、何を調べればいいんでしょうか?
    > 教えて下さい。


    例外についての大まかなことはここら辺をみるとよろしいかと思います。

    [例外の処理とスロー]
    http://msdn2.microsoft.com/ja-jp/library/5b2yeyab(VS.80).aspx

    で、私の言っている例外の中身というのは、

    [Exception クラスとプロパティ]
    http://msdn2.microsoft.com/ja-jp/library/5whzhsd2(VS.80).aspx

    を見て頂くとご理解いただけるかな、と思いますが、先に提示しているコードで言いますと

    Catch ex As Exception

    で、例外をExceptionクラスとして受けていますので、
    このexの実体の型(という表現が正しいのかな?)の判別をする必要があるでしょう。
    例えば、
    [SqlException クラス (System.Data.SqlClient)]
    http://msdn2.microsoft.com/ja-jp/library/system.data.sqlclient.sqlexception(VS.80).aspx
    なんかがexの実体だったりするわけです。
    実際の型がわかると、その例外のプロパティ(Message、StackTrace、InnerExceptionなど)から
    もう少し例外の内容がわかるので・・・これを「中身」と言いました。

    で、Catchブロックは複数かけるので、想定出来る例外と想定してない例外(微妙な表現ですが)の処理を
    わけておくことも出来ます。

    Try
    'Throw New ApplicationException("例外発生1!!!")
    Throw New ArgumentException("例外発生2!!!")
    Catch ea As ApplicationException
    MessageBox.Show(String.Format("{0}が発生しました。Message({1})", ea.GetType().Name, ea.Message))
    Catch ex As Exception
    MessageBox.Show(String.Format("{0}が発生しました。Message({1})", ex.GetType().Name, ex.Message))
    End Try

    ですので、先の例外の中身がわかっていて、接続エラー時の例外の型やプロパティ値が特定出来るのであれば
    それだけをリトライ対象にする・・・なんてことも出来ますね。
記事No.13607 のレス /過去ログ29より / 関連記事表示
削除チェック/

■13704  Re[3]: 接続エラーの原因及び処置方法
□投稿者/ 七曜 -(2008/02/01(Fri) 20:45:13)
    No13627 (NORTH さん) に返信
    > 一般的にやはりSQLサーバーへの接続処理はリトライ処理を
    > いれるものなのでしょうか?
    > それとも、原因を究明しリトライなんかしなくてもうまくいくように
    > するべきなのでしょうか?

    ああ、こちらの質問への回答をしてませんでしたね。
    例外の内容によっては、リトライする事に意味があるかもしれませんが、
    リトライしても同じ例外が発生する様な原因である場合、意味がないので、
    一般的にどうか、は、わかりませんが、私は(自動)リトライは基本的にしない派です。
    システムエラー系はログを書いて詳細追跡出来る様にしておいて、
    原因を分析する方が本質的な解決策への近道だったりする事が多いと思うからです。
記事No.13607 のレス /過去ログ29より / 関連記事表示
削除チェック/

■13717  Re[4]: 接続エラーの原因及び処置方法
□投稿者/ NORTH -(2008/02/03(Sun) 01:46:25)
    No13704 (七曜 さん) に返信
    > ■No13627 (NORTH さん) に返信
    >>一般的にやはりSQLサーバーへの接続処理はリトライ処理を
    >>いれるものなのでしょうか?
    >>それとも、原因を究明しリトライなんかしなくてもうまくいくように
    >>するべきなのでしょうか?
    >
    > ああ、こちらの質問への回答をしてませんでしたね。
    > 例外の内容によっては、リトライする事に意味があるかもしれませんが、
    > リトライしても同じ例外が発生する様な原因である場合、意味がないので、
    > 一般的にどうか、は、わかりませんが、私は(自動)リトライは基本的にしない派です。
    > システムエラー系はログを書いて詳細追跡出来る様にしておいて、
    > 原因を分析する方が本質的な解決策への近道だったりする事が多いと思うからです。

    回答ありがとうございます。
    例外の中身を調べて原因を調べてみます。
記事No.13607 のレス /過去ログ29より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -