首页 > 解决方案 > 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

我在事件查看器中发现错误消息: 错误消息

错误信息

标签: sqlvb.netwinforms

解决方案


代码看起来很干净,我看不到任何明显的东西,但我会确保 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 查询的结果集是否为空?


推荐阅读