タイマーをスプラッシュフォームでインスタンス化すると、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()
pingを実行し、それが生きているを確認するために、いくつかの基本的なクエリを実行してはどうですか? –
Andrewの提案と同じです(FYR:http://stackoverflow.com/questions/2440060/whats-the-best-way-to-test-sql-server-connection-programmatically) – Prisoner
「試してみてください」を使って試してみてくださいSQL接続を開いて接続できるかどうかを確認します。 – Bugs