【问题标题】:SQL Like statement not working in Visual BasicSQL Like 语句在 Visual Basic 中不起作用
【发布时间】:2012-11-15 00:19:34
【问题描述】:
Dim strText As String = tbRefine.Text
Dim sql As String = "SELECT user_name,forename,surname,game_cash,reg_group FROM tblGame WHERE user_name LIKE '" + strSearchText + "' & '*'"
Dim dsRefine As New DataSet
GetDataset(sql, "tblGame", dsRefine)

MsgBox(dsRefine.Tables("tblGame").Rows(0).Item(2).ToString)

这不起作用,它崩溃并说数据集中没有任何内容。 我知道数据集函数像以前一样成功地工作。 当我将 sql 语句打印到 microsoft access 中时,它工作正常。我做错了什么

【问题讨论】:

  • 您是否在文本框中放置诸如 '%somepattern%' 之类的值?
  • 我们需要知道 tbRefine.Text 的内容(希望不是 SQL 注入漏洞)。还有 GetDataSet 方法中的代码。

标签: sql vb.net dataset sql-like


【解决方案1】:

我认为还有一件事要提到: “*”通配符适用于 VB/VBA/MS-Access 中的“Like”运算符,但不适用于 T-SQL。 T-SQL 中“Like”运算符的正确通配符是“%”。 这就是为什么这个 T-SQL 语句:

Select... WHERE ... LIKE 'sText*'

在 MS-SQL(使用 T-SQL)中没有返回没有任何语法错误的数据,但在 MS-Access 中有效。

【讨论】:

    【解决方案2】:

    尝试在您的行中使用RTRIM() 函数:

    Dim sql As String = "SELECT user_name,forename,surname,game_cash,reg_group FROM tblGame WHERE RTRIM(user_name) LIKE '" + strSearchText + "' & '*'"

    【讨论】:

      【解决方案3】:

      试试这个:

      "SELECT user_name,forename,surname,game_cash,reg_group
       FROM tblGame
       WHERE user_name LIKE '%" + strSearchText + "%'"
      

      【讨论】:

        【解决方案4】:

        使用 SQL 参数更明智,因为您的方法对 SQL 注入开放。下面的链接将帮助您了解如何格式化 SQL 语句。我还建议通过存储过程来做,但帽子是可选的......

        http://forums.asp.net/t/1256985.aspx

        【讨论】:

          【解决方案5】:

          你喜欢的前导或尾随 % 符号怎么样?

          此时你会得到一个 where 子句,比如:

          LIKE 'searchtext''*'
          

          这看起来有点奇怪(我假设是 SQL 服务器?)。

          【讨论】:

            猜你喜欢
            • 2012-03-25
            • 2014-10-11
            • 1970-01-01
            • 2019-11-13
            • 2010-10-14
            • 1970-01-01
            • 1970-01-01
            • 2013-11-05
            • 1970-01-01
            相关资源
            最近更新 更多