Сокращение числа соединений SQL до 1 - ASP.net VB - PullRequest
0 голосов
/ 07 февраля 2012

В настоящее время я работаю над веб-страницей asp.net с GridView, отображающей таблицу из базы данных.Этот GridView имеет 4 DropDownLists, которые будут использоваться для фильтрации данных, отображаемых в GridView.Когда страница загружает 4 подпрограммы, каждая из которых соединяется с базой данных с помощью оператора select, чтобы заполнить DropDownList соответствующими заголовками фильтра.

Изначально у меня было одно соединение с циклом, который заполнял все отбрасывания.падения, но они содержали дубликаты.Затем я разделяю заполнение каждого DDL, чтобы операторы выбора могли содержать 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, LastName> DDLLN, Wage> DDLWag.

Это только тестовая БДи изученные здесь принципы будут применены к более крупному живому проекту.

Я уверен, что некоторые гуру смогут с этим легко справиться, но я просто не могу разобраться с этим даже после нескольких часов поиска.

Заранее спасибо.

1 Ответ

1 голос
/ 07 февраля 2012

Я добавляю это как ответ, потому что я не могу отформатировать его в комментарии, но это не отвечает на первоначальный вопрос о том, как написать 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

Я не вижу причин для вас пытаться вернуть все три результатав одном запросе.Это просто усложнит ваш код, чтобы сэкономить миллисекунду или две.Пул соединений обрабатывает создание соединений для вас на сервере базы данных, поэтому открытие нового соединения в вашем коде происходит очень быстро.

...