【发布时间】:2018-09-11 23:51:29
【问题描述】:
所以我在 asp.net Web 表单站点中加载下拉列表时遇到问题。我正在从 SQL Server 数据库中提取记录。我将结果绑定到一个下拉列表。
我的问题源于我正在检索 21500 多行这一事实,这会导致长时间延迟,直到浏览器抛出一条消息,询问我是否要停止长时间执行的脚本。如果我等待的时间足够长,大约 2 分钟它会回来,但运行速度仍然很慢,需要很长时间才能向下滚动列表。
这是 SQL 调用的 VB 代码:
Private Function GetCorInfo(field As String, tblname As String, Optional whereClause As String = "") As DataTable
Dim sqlCmdTxt As String = "Select " & field & " From " & tblname
Using conn As New SqlConnection(corConnection)
Try
conn.Open()
Catch ex As Exception
Master.message = "Unable to open SQL DB connection\nError: SQL101\nPlease contact the Help Desk for support.\n" & HttpUtility.JavaScriptStringEncode(ex.Message)
jsa.alertmessage(passedPage, Master.message)
End Try
Using sqlCmd As New SqlCommand
'Check for where clause
If whereClause <> "" Then
sqlCmdTxt = sqlCmdTxt & whereClause
If whereClause.Substring(7, 6) = "cornum" Then
sqlCmd.Parameters.AddWithValue("@cornum", ddl2.SelectedItem.Text)
End If
End If
If field = "cornum" Then
sqlCmdTxt = sqlCmdTxt & " Order By " & field & " Desc"
End If
sqlCmd.CommandText = sqlCmdTxt
sqlCmd.Connection = conn
Using sqlDT As New DataTable()
Using sqlDA As New SqlDataAdapter(sqlCmd)
Try
sqlDA.Fill(sqlDT)
Return sqlDT
Catch ex As Exception
conn.Close()
Master.message = "Unable to load list.\nError: SQL104\n" & HttpUtility.JavaScriptStringEncode(ex.Message)
jsa.alertmessage(passedPage, Master.message)
Return Nothing
End Try
End Using
End Using
End Using
End Using
End Function
然后,当返回数据表时,我使用以下代码将其绑定到下拉列表:
If Not IsNothing(dt) Then
'Set ddl
With ddl
'Turn on ddl
.Visible = True
'Set Data Source
.DataSource = dt
'Set Text Field
.DataTextField = field1
'Set Value Field
.DataValueField = field1
'Set variable to field value
'Bind Data
.DataBind()
'Assign Variable
field = ddl.SelectedItem.Text
'Check for ddl match
If whereClause <> "" AndAlso ddl1.SelectedIndex = 3 AndAlso ddl.ID = "ddl3" Then
.Items.FindByValue(field).Selected = True
ElseIf whereClause <> "" AndAlso ddl1.SelectedIndex = 3 AndAlso ddl.ID = "ddl4" Then
.Items.Insert(0, New ListItem("Select", "0"))
Else
'Insert first choice
.Items.Insert(0, New ListItem("Select", "0"))
End If
'Set to index 0
.SelectedIndex = 0
End With
Return 1
Else
Return -1
End If
两组代码都在函数中运行。
如何加快速度?我已经研究过使用 Session 和 View State,但如果我这样做,返回的记录数量会导致更大的减速。
有人有什么想法吗?
提前感谢您的帮助。
【问题讨论】:
-
也许搜索而不是填充下拉列表。
-
等等,这是一个有 21500 个选项可供选择的下拉菜单?人们应该浏览所有这些选项吗?这里的 UI 似乎有些奇怪......
-
你可以使用自动完成来代替......
-
这是企业所有当前客户的列表。不,他们不看,按起始字母并跳到该部分。自动完成是否还需要对完整列表进行验证?
-
不要用 20k+ 项填充下拉列表。
标签: asp.net sql-server vb.net webforms