sql - Winforms 文本框自动完成崩溃应用程序
问题描述
当我在文本框中写入时,有时程序会崩溃。我找不到解决方案。这是非常奇怪的情况。为什么程序有时会崩溃。这里代码:
Private Sub CreateProductNameAutoCompleteSource(ByVal tamamlamaturu As Byte)
Dim sql_ProductName As String
Dim gorkemDAL As New Aktuel.Data.SqlClient(cns_ScalaConnectionString)
Dim dtbl_ProductName As DataTable
Dim X As New AutoCompleteStringCollection
Dim parcakodu
If tamamlamaturu = tamamlamatipi.talepedilenparca Then parcakodu = txt_talepedilenparca.Text
If tamamlamaturu = tamamlamatipi.gonderilenparca Then parcakodu = txt_gonderilenparca.Text
sql_ProductName = "select distinct urunkodu from urunler where urunkodu like '" & parcakodu & "%' order by urunkodu asc"
gorkemDAL.OpenDbConnection()
dtbl_ProductName = gorkemDAL.ExecuteTable(sql_ProductName)
gorkemDAL.CloseDbConnection()
For Each row As DataRow In dtbl_ProductName.Rows
X.Add(row(0).ToString)
Next
If tamamlamaturu = tamamlamatipi.talepedilenparca Then
txt_talepedilenparca.AutoCompleteSource = AutoCompleteSource.CustomSource
txt_talepedilenparca.AutoCompleteCustomSource = X
txt_talepedilenparca.AutoCompleteMode = AutoCompleteMode.Suggest
End If
If tamamlamaturu = tamamlamatipi.gonderilenparca Then
txt_gonderilenparca.AutoCompleteSource = AutoCompleteSource.CustomSource
txt_gonderilenparca.AutoCompleteCustomSource = X
txt_gonderilenparca.AutoCompleteMode = AutoCompleteMode.Suggest
End If
End Sub
和 Textchange 事件:
Private Sub txt_talepedilenparca_TextChanged(sender As Object, e As EventArgs) Handles txt_talepedilenparca.TextChanged
CreateProductNameAutoCompleteSource(tamamlamatipi.talepedilenparca)
End Sub
我在事件查看器中发现错误消息: 错误消息
解决方案
代码看起来很干净,我看不到任何明显的东西,但我会确保 parcakodu 不包含任何 sql 终止语音标记:
IE
sql_ProductName = "select distinct urunkodu from urunler where urunkodu like '" & parcakodu & "%' order by urunkodu asc"
变成:
sql_ProductName = "select distinct urunkodu from urunler where urunkodu like '" & parcakodu.Replace("'", "''") & "%' order by urunkodu asc"
(你可能想复制和粘贴很难看到我在那里做了什么)
我还将您的 ForEach 语句包装在一个空检查中 - 您是否正在尝试访问 dtbl_ProductName 当它为空时?如果对象为空,则访问属性 .Rows 将引发异常,它本身就是 Nothing。
尝试类似:
If (dtbl_ProductName IsNot Nothing)
For Each row As DataRow In dtbl_ProductName.Rows
X.Add(row(0).ToString)
Next
End If
失败 - 检查您是否可以通过使用过去导致其崩溃的已知搜索字符串使其每次崩溃。字符串 sql 中是否存在不喜欢的字符,或者您的 sql 查询的结果集是否为空?
推荐阅读
- java - 为什么查询谷歌云文件返回一个空列表?
- git - 在 git 中 rebase 时如何记录合并冲突解决方案?
- python - 对于 scipy 中的非中心卡方,输入“nc”是如何定义的?
- java - 用@DataJpaTest 注释的测试不是用@Autowired 注释的自动装配字段
- wpf - 为网格背景使用 DrawingBrush 资源
- ruby-on-rails - 在引发错误的方法中调用 RSpec 测试 Rollbar
- ios - 表格视图中的行不会扩展它的宽度并且是堆叠的 Swift
- eclipse-cdt - Eclipse CDT 将 #ifndef 下的错误部分代码变灰
- r - 读取 csv 文件,其中一个变量的值针对 R 中的每个观察值扩展为多行
- c# - 如何使用 C# HttpClient 发送未编码的表单数据