2011-06-27 13 views
0

enter image description hereVisual 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

関連する問題