vb.net:检查SQL Server状态

时间:2017-01-20 06:59:48

标签: sql-server vb.net

有时,当我的客户打开或重新启动计算机并直接打开我的vb.net应用程序时,应用程序会在SQL Server完全启动之前打开。

这会导致许多意外行为。为了避免这种情况,我需要启动一个启动画面并检查其中的SQL Server状态,并且只有当SQL Server状态指示它已完全加载时,我才能运行整个应用程序。

问题是:如何检查SQL Server状态,是否已完成加载?整个SQL Server,而不是数据库。

1 个答案:

答案 0 :(得分:0)

您可以在启动窗体中实例化一个计时器,检查它是否可以每秒(或您喜欢的任何时间间隔)登录数据库。我将启动窗体调用为模式,因此调用应用程序无法继续,直到启动窗体检测到连接并自行关闭。

至少您需要服务器名称来检查连接。如果它使用的是命名实例,那么服务器名称还应该包含格式为" myserver \ myinstance"的实例名称。

我已经在3个重载函数 IsConnected 中封装了连接检查逻辑。您可以在启动表单中使用这些函数来检查计时器滴答的连接。 (每个都取决于下一个)。您可以根据您可用的输入项目使用适合的任何函数重载。

对于第一次重载,如果应用程序在可以连接到数据库服务器的Windows安全上下文下运行,那么您不需要提供用户名和密码(作为空字符串传递),否则您需要提供登录数据库服务器所需的凭据。或者,您可以为其他重载提供自己的连接字符串或连接对象。

(启动表单中的代码)...

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

我从主应用程序调用启动窗体作为模式对话框,因此应用程序将被阻止,直到检测到连接为止。

(来自调用应用程序表单...)

        frm_Splash.ShowDialog()