我目前正在使用一个带有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。
这只是一个测试数据库,这里学到的原理将应用于更大的实时项目。
我确信有些大师能够轻松解决这个问题,但即使经过数小时的搜索,我也无法理解它。
提前致谢。
答案 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
我认为您没有理由尝试在单个查询中返回所有三个结果。这只会使您的代码不必要地复杂化,只需要节省一两毫秒。连接池为您处理数据库服务器上的连接创建,因此在代码中打开新连接的速度非常快。