asp.net - 搜索功能失败
问题描述
我想在文本框中搜索数据。下面是我的代码。我试图搜索但没有任何反应。
If Not Me.IsPostBack Then Me.SearchPanelId() End If End Sub
Private Sub SearchPanelId()
Dim ConnectionString As String = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString
Using con As New SqlConnection(ConnectionString)
Using cmd As New SqlCommand()
Dim sql As String = "SELECT panelid, panelname, paneltype FROM PANEL_TABLE"
If Not String.IsNullOrEmpty(TextBox1.Text.Trim()) Then
sql += " WHERE panelid LIKE @panelid + '%'"
cmd.Parameters.AddWithValue("@panelid", TextBox1.Text.Trim())
End If
cmd.CommandText = sql
cmd.Connection = con
Using sda As New SqlDataAdapter(cmd)
Dim dt As New DataTable()
sda.Fill(dt)
GridView1.DataSource = dt
GridView1.DataBind()
End Using
End Using
End Using
End Sub
Protected Sub Search(sender As Object, e As EventArgs)
Me.SearchPanelId()
End Sub
Protected Sub OnPaging(sender As Object, e As GridViewPageEventArgs)
GridView1.PageIndex = e.NewPageIndex
Me.SearchPanelId()
End Sub
解决方案
在开始创建对象之前进行验证。您需要检查该 ID 的数据类型是否有效。我猜这是一个整数类型,但检查你的数据库。如果我错了并且数据类型是 .VarChar,那么请查看第二个版本。:-) Like 关键字对数字字段没有任何意义。
不要使用 .AddWithValue 见http://www.dbdelta.com/addwithvalue-is-evil/ 和 https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop- using-addwithvalue-already/ 和另一个: https ://dba.stackexchange.com/questions/195937/addwithvalue-performance-and-plan-cache-implications
不需要 DataAdapter。只需使用 DataTable 的加载方法。
Private Sub SearchPanelId()
Dim IDValue As Integer
Dim dt As New DataTable
If String.IsNullOrEmpty(TextBox1.Text.Trim()) OrElse Not Integer.TryParse(TextBox1.Text.Trim, IDValue) Then
Return
End If
Using con As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
Using cmd As New SqlCommand("SELECT panelid, panelname, paneltype FROM PANEL_TABLE WHERE panelid = @panelid", con)
cmd.Parameters.Add("@panelid", SqlDbType.Int).Value = IDValue
con.Open()
dt.Load(cmd.ExecuteReader)
End Using
End Using
GridView1.DataSource = dt
GridView1.DataBind()
End Sub
如果 Id 是 .VarChar
Private Sub SearchPanelId()
Dim dt As New DataTable
If String.IsNullOrEmpty(TextBox1.Text.Trim()) Then
Return
End If
Using con As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
Using cmd As New SqlCommand("SELECT panelid, panelname, paneltype FROM PANEL_TABLE WHERE panelid Like @panelid", con)
cmd.Parameters.Add("@panelid", SqlDbType.VarChar).Value = TextBox1.Text.Trim() & "%"
con.Open()
dt.Load(cmd.ExecuteReader)
End Using
End Using
GridView1.DataSource = dt
GridView1.DataBind()
End Sub
推荐阅读
- prometheus - Kubernetes cadvisor 端点未被普罗米修斯抓取
- android - 如何将内容包装在 android 的 AutoCompleteTextView 中
- mysql - 用 CAST 选择:成功;使用 CAST 更新:失败
- nginx - 如何阻止 Nginx 充当显式代理?
- flask - wtforms 中的后处理字段数据
- flutter - 限制可拖动小部件中手势检测器的大小
- c# - 如何对链接数据库实体进行递归搜索?
- c# - 绑定过滤器不存在
- java - “FCM”应用程序在此行崩溃 getToken() “java.lang.IllegalStateException:默认 FirebaseApp 未在此过程中初始化”
- azure-cosmosdb - 使用 Xml-configuration 通过 serilog 登录到 Cosmos DB