我有一个程序,用户将选择一个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
答案 0 :(得分:0)
SqlConnection类有ConnectionTimeout property,默认为15秒。 您可以将其设置为较低的值以减少等待时间。
另一种优化方法是将连接检查卸载到另一个线程, this question中有一些不错的C#示例。