【发布时间】:2021-11-11 07:46:58
【问题描述】:
我尝试根据另一个下拉列表值更改我的下拉列表值。在输出屏幕上加载了第一个下拉列表值,但在第一个下拉列表项更改后未显示第二个下拉列表值
Dim con As New SqlConnection("Data Source=DESKTOP-311HSD1;Initial Catalog=Covid;Integrated Security=True;Pooling=False")
Dim cmd As SqlCommand
Dim ds As DataSet
Dim sda As SqlDataAdapter
Dim sdr As SqlDataReader
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Try
If con.State = ConnectionState.Closed Then
con.Open()
End If
If Not IsPostBack Then
BindDistrict()
End If
Catch ex As Exception
End Try
End Sub
Private Sub BindDistrict()
Try
Using sqlConn As New SqlConnection("Data Source=DESKTOP-311HSD1;Initial Catalog=Covid;Integrated Security=True;Pooling=False")
Using sqlCmd As New SqlCommand()
sqlCmd.CommandText = "SELECT DISTINCT District FROM [dbo].[Hospital]"
sqlCmd.Connection = sqlConn
sqlConn.Open()
Dim da As New SqlDataAdapter(sqlCmd)
Dim dt As New DataTable()
da.Fill(dt)
drp_dist.DataSource = dt
drp_dist.DataValueField = "District"
drp_dist.DataTextField = "District"
drp_dist.DataBind()
sqlConn.Close()
drp_dist.Items.Insert(0, New ListItem("Select District", "0"))
End Using
End Using
Catch ex As Exception
End Try
End Sub
Private Sub drp_dist_SelectedIndexChanged(sender As Object, e As EventArgs) Handles drp_dist.SelectedIndexChanged
Dim district As String = drp_dist.SelectedValue.ToString()
BindHospital(district)
End Sub
Private Sub BindHospital(ByVal district As String)
Dim dist As String = district
Try
Using sqlConn As New SqlConnection("Data Source=DESKTOP-311HSD1;Initial Catalog=Covid;Integrated Security=True;Pooling=False")
Using sqlCmd As New SqlCommand()
sqlCmd.CommandText = "SELECT * FROM [dbo].[Hospital] WHERE District='" + dist + "'"
sqlCmd.Connection = sqlConn
sqlConn.Open()
Dim da As New SqlDataAdapter(sqlCmd)
Dim dt As New DataTable()
da.Fill(dt)
drp_hospital.DataSource = dt
drp_hospital.DataValueField = "HospitalID"
drp_hospital.DataTextField = "Hospital_Name"
drp_hospital.DataBind()
sqlConn.Close()
drp_hospital.Items.Insert(0, New ListItem("Select Hospital", "0"))
End Using
End Using
Catch ex As Exception
End Try
End Sub
【问题讨论】:
-
为什么要共享所有不做任何事情的类级变量?但不分享
drp_hospital和drp_dist? -
不要写空的 Catch 块。你只是在吞下错误。
-
不要在使用的方法之外声明连接。连接需要使用 Using blocks 来处理。
-
不要连接字符串来构建 CommandText。始终使用参数来避免 sql 注入。