将SQL连接减少到只有1 - ASP.net VB

时间:2012-02-07 11:49:41

标签: asp.net sql-server vb.net ado.net connection-pooling

我目前正在使用一个带有GridView的asp.net网页,该网格显示数据库中的表格。这个GridView有4个DropDownLists,用于过滤GridView上显示的数据。当页面加载时,运行4个子例程,每个子例程都使用select语句连接到数据库,以使用相关的过滤器标题填充DropDownList。

最初,我有一个连接循环,填充所有的下拉列表,但这些包含重复项。然后我拆分每个DDL的填充,以便select语句可以包含DISTINCT。

我希望(并且确定这里有一种方法)能够使用来自一个连接的数据填充所有DDL。

一个连接的代码:

        Protected Sub FillDepDDL()

        Dim conn As New SqlConnection()
        conn.ConnectionString = WebConfigurationManager.ConnectionStrings("TestDBConnectionString").ConnectionString

        Dim connection As New SqlConnection(conn.ConnectionString)
        connection.Open()

        Const FillAllQS As String = "SELECT DISTINCT [Department] FROM [Employees]"

        Dim command As New SqlCommand(FillAllQS, connection)

        Dim reader As SqlDataReader = command.ExecuteReader()

        Dim sel As New ListItem
        sel.Text = "Please Select"
        sel.Value = "*"
        DDLDepartment.Items.Add(sel)
        While reader.Read

            Dim Deplist As New ListItem()
            Deplist.Value = reader("Department")
            Deplist.Text = reader("Department")
            DDLDepartment.Items.Add(Deplist)

        End While
        reader.Close()
        conn.Close()

    End Sub

其他3个列名称:FirstName> DDLFN,姓氏> DDLLN,工资> DDLWag。

这只是一个测试数据库,这里学到的原理将应用于更大的实时项目。

我确信有些大师能够轻松解决这个问题,但即使经过数小时的搜索,我也无法理解它。

提前致谢。

1 个答案:

答案 0 :(得分:1)

我将其添加为答案,因为我无法在注释中对其进行格式化,但这并不能解答如何编写sql以返回所有三个不同结果集的原始问题。相反,它回答了如何重写上面的代码,以便在发生异常时正确处理连接。

Protected Sub FillDepDDL()
      Dim Deplist As ListItem
      Dim sel As New ListItem
      sel.Text = "Please Select"
      sel.Value = "*"
      DDLDepartment.Items.Add(sel)  

      Using conn As New SqlConnection(WebConfigurationManager.ConnecitonString("TestDBConnectionString").ConnectionString)          
           Using cmd As New SqlCommand("SELECT DISTINCT [Department] FROM [Employees]", conn)
                conn.Open()

                Using reader = cmd.ExecuteReader()
                     While reader.Read
                          Deplist = New ListItem()
                          Deplist.Value = reader("Department")
                          Deplist.Text = reader("Department")
                          DDLDepartment.Items.Add(Deplist)
                     End While
                End Using       
           End Using    
      End Using
 End Sub

我认为您没有理由尝试在单个查询中返回所有三个结果。这只会使您的代码不必要地复杂化,只需要节省一两毫秒。连接池为您处理数据库服务器上的连接创建,因此在代码中打开新连接的速度非常快。