2017-01-20 6 views
0

お客様がコンピュータの電源を入れたりコンピュータを再起動したり、vb.netアプリケーションを直接開くと、SQL Serverが完全に起動する前にアプリケーションが開きます。vb.net:SQL Serverステータスの確認

この結果、多くの予期しない動作が発生します。このような状況を回避するには、スプラッシュ画面を起動してその中のSQL Serverの状態を確認し、SQL Serverの状態が完全にロードされていることを示す場合にのみ、アプリケーション全体を実行する必要があります。

問題は、SQL Serverの状態を確認する方法、読み込みが完了したかどうかです。データベース全体ではなくSQL Server全体。

+2

pingを実行し、それが生きているを確認するために、いくつかの基本的なクエリを実行してはどうですか? –

+0

Andrewの提案と同じです(FYR:http://stackoverflow.com/questions/2440060/whats-the-best-way-to-test-sql-server-connection-programmatically) – Prisoner

+0

「試してみてください」を使って試してみてくださいSQL接続を開いて接続できるかどうかを確認します。 – Bugs

答えて

0

タイマーをスプラッシュフォームでインスタンス化すると、1秒ごと(または好きな間隔で)データベースにログインできるかどうかを確認できます。スプラッシュフォームをモーダルとして呼び出すと、スプラッシュフォームが接続を検出して自身を閉じられるまで、呼び出し元のアプリケーションは続行できません。

少なくとも、接続を確認するにはサーバー名が必要です。名前付きインスタンスを使用している場合、サーバー名には "myserver \ myinstance"の形式でインスタンス名を含める必要があります。

オーバーロードされた3つの機能に接続チェックロジックをカプセル化しましたIsConnected。これらの関数をスプラッシュフォームで使用して、タイマーティックからの接続をチェックすることができます。 (それぞれ次のものに依存します)。使用可能な入力項目に基づいて、関数のオーバーロードに適した関数を使用することができます。

アプリケーションがdbサーバーに接続できるWindowsセキュリティコンテキストで実行されている場合は、ユーザー名とパスワードを入力する必要はありません(空の文字列として渡す)。そうでない場合は、 dbサーバーにログインするために必要な資格情報または、他のオーバーロードに対して独自の接続文字列または接続オブジェクトを提供できます。

(スプラッシュフォーム内のコード)...

Private Sub Timer1_Tick(sender As Object, e As System.EventArgs) Handles Timer1.Tick 
    If Me.IsConnected("(local)\SQL2008R2", "", "") Then Me.Close() 
End Sub 


Public Function IsConnected(ServerName As String, UserID As String, Password As String) As Boolean 
    Dim connStr As String = String.Format("Data Source={0}", ServerName) 
    If Not String.IsNullOrEmpty(UserID) Then 
     connStr &= String.Format(";User ID={0};Password={1}", UserID, Password) 
    Else 
     connStr &= ";Integrated Security=True" 
    End If 
    Return IsConnected(connStr) 
End Function 

Public Function IsConnected(Connection As String) As Boolean 
    Static conn As SqlConnection 
    If conn Is Nothing Then 
     conn = New SqlConnection(Connection) 
     conn.Open() 
    End If 
    Return IsConnected(conn) 
End Function 

Public Function IsConnected(ByRef Conn As SqlConnection) As Boolean 
    If Conn IsNot Nothing Then Return (Conn.State = ConnectionState.Open) 
    Return False 
End Function 

Iのような、モーダルダイアログとしてメインアプリからスプラッシュフォームを起動したいので、接続が検出されるまで、アプリケーションはブロックされ。どのように(呼び出し元のアプリケーションのフォームから...)

 frm_Splash.ShowDialog() 
+0

完璧!私はそれを試してみます。ありがとうございます。 – user6218508

関連する問題