【问题标题】:Parameterised query breaks when doing LIKE condition. Why?执行 LIKE 条件时,参数化查询会中断。为什么?
【发布时间】:2009-01-13 21:53:54
【问题描述】:

所以,我有一个执行参数化 LIKE 查询的方法。该方法接受搜索参数/值,然后将其添加到准备查询的命令中。

它不工作。它应该可以工作,当我将要搜索的值直接编码到 SQL 字符串中时,没有参数化,它确实有效!当我将它作为参数时,没有!任何想法。

这是一些(假的,我已经改名了)示例代码。

myDataReader = SQLExecute("SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE 'Arrested Development%'")

会工作的。不过

Function MethodOfReturningHorror(ByVal TVShow as String) as SqlDataReader
{
dim command as new SQLCommand
command.connection = sqlconnection
command.CommandText = "SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE '@tvShow%'"
command.Parameters.Add("tvShow",TVShow)

return command.ExecuteReader()
}

为了懒惰/简洁,我错过了与问题无关的代码。所以忽略返回位和其他东西,重要的是数据读取器不包含任何内容,而它在第一个示例中包含。我确信这与 LIKE 子句的参数化有关。

谢谢!

【问题讨论】:

    标签: sql .net parameters sql-like


    【解决方案1】:

    试试这个:

    command.CommandText = "SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE @tvShow + '%'"
    

    【讨论】:

      【解决方案2】:

      尝试将“%”附加到参数字符串的末尾,而不是将其嵌入到 sql 中。

      【讨论】:

        【解决方案3】:

        试试这个,以确保您检查的值是 varchar 值,而不是整数类型:

        command.CommandText = "SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE convert(varchar(100), @tvShow) + '%'"
        

        我在 T-SQL 进行原生类型转换和字符串连接时遇到了一些问题。

        (显然将“varchar(100)”更改为适用于您的实例的任何内容:您的数据类型,您的预期长度)

        【讨论】:

        • 如果您将参数设置为在客户端代码中包含类型信息,这不是问题。
        【解决方案4】:

        @tvShow 是一个变量,您在字符串中使用它。这将相当于 C# 中的 this:

        var tvShow = "5th Wheel";
        var netwokAndShow = "Fox tvShow";
        Console.WriteLine(networkAndShow); // Prints 'Fox tvShow', not 'Fox 5th Wheel'
        

        你希望它看起来像:

        LIKE @tvShow + '%'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-23
          • 2015-08-31
          • 2011-05-19
          • 1970-01-01
          • 2018-07-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多