我基本上想在我的应用程序中进行此操作,因此我们的技术人员可以更轻松地安装我们的软件。到目前为止,我创建了一个包含4个文本框的表单:服务器名称,用户名,密码和用于选择数据库的组合框。在数据库选择代码之前,一切都很简单。 Microsoft的向导非常高效,在填充数据库组合框时没有等待时间。这是我能想到的最好的:
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
该代码可以很好地获取数据库,但很明显,如果发生异常,整个屏幕会锁定,并且可能需要一段时间才能恢复,具体取决于数据库错误。我的问题是,我可以像微软那样让我的酷/效率高吗?
答案 0 :(得分:1)
当然可以。微软只花了不少时间。他们使用的所有工具也随时供您使用。以下是一些线索:
SqlDataSourceEnumerator
查找网络上的所有SQL实例时,将其放在一个线程中,甚至更好地使用TPL并使其成为可取消的任务。在非UI线程上放置尽可能多的工作,因此它不会阻塞。如果它可能是需要一段时间才能返回的操作,则显示一个对话框,如“搜索”,取消按钮取消线程/任务。