如何重新创建与Visual Studio中使用的数据库连接向导类似的数据库连接向导?

时间:2011-06-27 16:05:07

标签: .net vb.net

enter image description here

我基本上想在我的应用程序中进行此操作,因此我们的技术人员可以更轻松地安装我们的软件。到目前为止,我创建了一个包含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

该代码可以很好地获取数据库,但很明显,如果发生异常,整个屏幕会锁定,并且可能需要一段时间才能恢复,具体取决于数据库错误。我的问题是,我可以像微软那样让我的酷/效率高吗?

1 个答案:

答案 0 :(得分:1)

当然可以。微软只花了不少时间。他们使用的所有工具也随时供您使用。以下是一些线索:

  1. 在非UI线程上处理尽可能多的数据库查询。例如,当使用SqlDataSourceEnumerator查找网络上的所有SQL实例时,将其放在一个线程中,甚至更好地使用TPL并使其成为可取消的任务。在非UI线程上放置尽可能多的工作,因此它不会阻塞。如果它可能是需要一段时间才能返回的操作,则显示一个对话框,如“搜索”,取消按钮取消线程/任务。
  2. 更好的错误处理。处理异常并确定它们是否对用户有用。
  3. 至于获取数据库,我会远离SqlDataAdapter并只使用阅读器。对于这么少的信息,数据适配器非常重要。