【问题标题】:vb.net: Checking SQL Server statusvb.net:检查 SQL Server 状态
【发布时间】:2017-01-20 06:59:48
【问题描述】:

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

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

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

【问题讨论】:

  • ping 它然后执行一些基本查询以确认它是否存在如何?
  • 与 Andrew 的建议相同(FYR:stackoverflow.com/questions/2440060/…
  • 只需使用Try Catch 并尝试打开 SQL 连接以查看是否可以连接。
  • 您指的是与 vb.net 应用程序在同一台机器上运行的 SQL Server 实例吗?

标签: sql-server vb.net


【解决方案1】:

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

至少您需要服务器名称来检查连接。如果它使用命名实例,则服务器名称还应包括格式为“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()

【讨论】:

  • 完美!我会试试看。谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 2017-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多