2011-06-27 20 views
0

enter image description here如何重新創建數據庫連接嚮導,如在Visual Studio中使用的那樣?

我基本上想在我的應用程序中做到這一點,所以我們的技術人員安裝我們的軟件更容易。到目前爲止,我製作了一個包含4個文本框的表單:服務器名稱,用戶名,密碼和用於選擇數據庫的組合框。一切都非常簡單,直到數據庫選擇代碼。微軟的嚮導非常高效,沒有等待數據庫組合框被填充的等待時間。這裏是最好的我能想出:

Private Sub cmbDatabase_DropDown(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbDatabase.DropDown 
    Dim databaselist As New DataSet 
    Dim connection As SqlClient.SqlConnection 
    If txtServer.Text <> "" And txtLogin.Text <> "" And txtPassword.Text <> "" Then 

     Try 
     connection = New SqlClient.SqlConnection("Data Source=" + txtServer.Text + ";Initial Catalog=master;User ID=" + txtLogin.Text + ";Password=" + txtPassword.Text + ";Connect Timeout=5") 
      connection.Open() 
     Catch ex As Exception 
     End Try 


     If Not connection.State = ConnectionState.Closed Then 
      Dim command As New SqlClient.SqlDataAdapter("EXEC sp_databases", connection) 
      command.Fill(databaselist) 
      cmbDatabase.DataSource = databaselist.Tables(0) 
      cmbDatabase.DisplayMember = "DATABASE_NAME" 
     End If 
    End If 

該代碼獲取數據庫就好了,但很明顯,如果有異常發生時,整個屏幕鎖起來,這可能需要一段時間,這取決於數據庫的錯誤是什麼恢復。我的問題是,我可以讓自己像微軟一樣酷嗎?

回答

1

當然可以。微軟只花了更多時間。他們使用的所有工具也可供您使用。以下是一些線索:

  1. 儘可能在非UI線程上處理儘可能多的數據庫查詢。例如,當使用SqlDataSourceEnumerator來查找網絡上的所有SQL實例時,將其放入一個線程中,或者甚至更好地使用TPL並使其成爲可取消的任務。在非UI線程上放置儘可能多的工作,以免阻塞。如果它可能需要一段時間才能返回,請使用取消按鈕取消線程/任務來顯示「搜索」對話框。
  2. 更好的錯誤處理。處理異常並決定它們是否對用戶有用,或者不是。
  3. 就獲取數據庫而言,我會遠離SqlDataAdapter並使用閱讀器。數據適配器對於這樣的小信息非常重要。
+0

不知道關於SqlDataSourceEnumerator,我會研究一下。另外我使用.NET 3.5,所以沒有TPL對我:( – broke

相關問題