Sql server vb.net:检查SQL Server状态

Sql server vb.net:检查SQL Server状态,sql-server,vb.net,Sql Server,Vb.net,有时,当我的客户打开或重新启动他们的计算机,并直接打开我的vb.net应用程序时,应用程序会在SQL Server完全启动之前打开 这会导致许多意想不到的行为。为了避免这种情况,我需要启动一个启动屏幕并检查其中的SQL Server状态,只有当SQL Server状态指示它已完全加载时,我才能运行整个应用程序 问题是:如何检查SQL Server状态,是否已完成加载?整个SQL Server,而不是数据库。您可以在splash表单中实例化一个计时器,检查它是否可以每隔一秒钟(或您喜欢的任何时间间

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

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


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

您可以在splash表单中实例化一个计时器,检查它是否可以每隔一秒钟(或您喜欢的任何时间间隔)登录数据库。我会以模态的形式调用splash表单,以便在splash表单检测到连接并关闭自身之前,调用应用程序无法继续

至少您需要服务器名称来检查连接。如果使用的是命名实例,则服务器名称还应包括格式为“myserver\myinstance”的实例名称

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

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

(splash表单中的代码)

我会以模式对话框的形式从主应用程序中调用splash表单,因此在检测到连接之前,应用程序会被阻止

(从呼叫应用程序表单…)


如何ping它,然后执行一些基本查询以确认它是否活动?与Andrew suggestion(FYR:)相同,只需使用
Try Catch
,并尝试打开SQL连接以查看是否可以连接。您是指与vb.net应用程序在同一台机器上运行的SQL Server实例吗?太好了!我试试看。谢谢你。
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()