VB.NET文本框自动搜索问题:未找到结果时恢复自动ID框默认值
问题解决:未找到匹配结果时恢复自动生成ID文本框的默认值
核心问题定位
你的代码在未找到匹配供应商的Else分支里,只清空了地址、州、GST号的文本框,但没有处理txtvendorid_frmvdt的默认值恢复,这就是它没法回到初始状态的原因。另外代码还有几个潜在问题,比如SQL注入风险、多余的执行语句、资源未妥善释放。
解决方案及修正后的代码
下面是修复后的完整代码,同时解决了潜在问题:
Private Sub txtvendorname_frmvdt_TextChanged(sender As Object, e As EventArgs) Handles txtvendorname_frmvdt.TextChanged Try ' 使用Using语句自动释放数据库连接、命令、阅读器资源 Using conn95 As New SqlConnection("你的数据库连接字符串") conn95.Open() ' 参数化查询,彻底避免SQL注入 Dim qryvi As String = "select * from tblvendorinfo where Vendorname = @VendorName" Using cmdcu As New SqlCommand(qryvi, conn95) cmdcu.Parameters.AddWithValue("@VendorName", txtvendorname_frmvdt.Text) ' 移除多余的ExecuteNonQuery(),ExecuteReader会直接执行查询 Using drvi As SqlDataReader = cmdcu.ExecuteReader() If drvi.Read() Then ' 找到匹配项,填充字段 txtvendorid_frmvdt.Text = drvi("Vendorid").ToString() txtvendoraddress_frmvdt.Text = drvi("Vendoraddress").ToString() txtvendorstate_frmvdt.Text = drvi("Vendorstate").ToString() txtvendorgst_frmvdt.Text = drvi("Vendorgstno").ToString() Else ' 未找到匹配项,清空所有字段并恢复ID文本框默认值 txtvendorid_frmvdt.Text = "" ' 若默认值是自动生成的,可替换为你的生成逻辑(比如Loadvendorid1()核心代码) txtvendoraddress_frmvdt.Text = "" txtvendorstate_frmvdt.Text = "" txtvendorgst_frmvdt.Text = "" End If End Using End Using End Using ' 若Loadvendorid1()是自动生成默认ID的方法,可按需调整调用时机(比如仅在Else分支调用) Loadvendorid1() Catch ex As Exception MsgBox(ex.Message) End Try End Sub
关键修改说明
- 恢复ID文本框默认值:在
Else分支中添加了txtvendorid_frmvdt.Text = "",如果你的默认值是自动生成的(比如Loadvendorid1()负责生成),可以把这行替换为直接调用生成逻辑,确保ID框回到初始状态。 - 避免SQL注入:把拼接字符串的查询改成参数化查询,防止恶意输入破坏数据库。
- 资源自动释放:用
Using语句包裹连接、命令和阅读器,确保即使发生异常,资源也能正确释放,避免连接泄漏。 - 移除冗余代码:删掉了没用的
cmdcu.ExecuteNonQuery(),因为ExecuteReader已经会执行查询操作。
内容的提问来源于stack exchange,提问作者Gopal Singh
相关产品推荐
相关产品推荐

