使用无效访问挂起SqlConnection.Open()

时间:2014-06-10 19:24:25

标签: sql sql-server vb.net

我有一个程序,用户将选择一个SQL服务器(填充所有可用的SQL实例),然后选择所选服务器中的数据库。该程序使用硬编码的用户ID和密码,程序的其他部分用来访问数据库。如果用户意外选择了没有此用户名/密码的数据库,则在我选择服务器时它会挂起,并给出以下错误:

  

System.Data.SqlClient.SqlException(0x80131904):与网络相关或   在建立与SQL的连接时发生特定于实例的错误   服务器。找不到服务器或无法访问服务器。

有没有办法防止挂起,而只是立即弹出一条消息(或设置等待SQL响应的最长时间)?

我的连接代码如下:

Private Sub cboServers_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboServers.SelectedIndexChanged
    Dim dbList As List(Of String) = New List(Of String)
    Dim connectString As String
    Dim selectSQL As String
    Dim server As String

    If cboServers.Text = "" Then
        MessageBox.Show("please select a server")
        Return
    End If
    Try
        server = cboServers.Text
        connectString = "Server=" & server & " ;Initial Catalog=master; User Id=*****; password=*******;"

        Dim sqlConn = New SqlConnection(connectString)
        Dim cmd As SqlCommand = New SqlCommand("SELECT NAME from sys.databases;", sqlConn)
        Dim sqlDA As SqlDataAdapter = New SqlDataAdapter
        sqlDA.SelectCommand = cmd

        sqlConn.Open()
        'Dim conn As SqlConnection
        'conn = New SqlConnection(connectString)
        'conn.Open()

        'selectSQL = "SELECT NAME from sys.databases;"

        'Dim com As SqlCommand = New SqlCommand(selectSQL, sqlConn)

        Dim dr As SqlDataReader = cmd.ExecuteReader

        While (dr.Read)
            dbList.Add(dr(0).ToString)
        End While

        cboDatabases.DataSource = dbList
        sqlConn.Close()

    Catch ex As Exception
        MessageBox.Show(ex.ToString)
        'MessageBox.Show("Server not accessible")
    End Try


End Sub

1 个答案:

答案 0 :(得分:0)

SqlConnection类有ConnectionTimeout property,默认为15秒。 您可以将其设置为较低的值以减少等待时间。

另一种优化方法是将连接检查卸载到另一个线程, this question中有一些不错的C#示例。