1

我正在使用以下 SQL 查询来搜索数据库。

string sql = "SELECT [identifier] FROM [information] WHERE [identifier] LIKE '" + identifier + "%'";

当我输入“m”搜索“Microsoft”时,它会找到 Microsoft,但如果我输入“o”,它不会找到 Microsoft。

我如何更改 SQL 以便它找到包含该特定单词的所有内容?

4

2 回答 2

0

搜索字母时它不搜索字符串Microsofto的原因是因为您的条件过滤器基于起始字符。

这种情况,

... WHERE [identifier] LIKE 'o%'

意味着..给我所有以字符开头的字符串o。如果你想搜索那个contains字符的字符串o,你应该用%%. 例子,

... WHERE [identifier] LIKE '%o%'

作为旁注,您应该参数化要避免的值SQL Injection

试试这个代码片段:

string connStr = "connection string here";
string content = string.Format("{0}{1}{0}", "%", identifier);
string sqlStatement = "SELECT [identifier] FROM [information] WHERE [identifier] LIKE ?";
using (SqlConnection conn = new SqlConnection(connStr))
{
    using(SqlCommand comm = new SqlCommand())
    {
        comm.Connection = conn;
        comm.CommandText = sqlStatement;
        comm.CommandType = CommandType.Text;

        comm.Parameters.AddWithValue("@content", content);

        try
        {
            conn.Open();
            // other codes
        }
        catch(SqlException e)
        {
            // do something with the exception
            // do not hide it
            // e.Message.ToString()
        }
    }
}

为了正确编码

  • 使用using声明进行正确的对象处理
  • 使用try-catch块来正确处理异常
于 2013-07-02T02:42:04.903 回答
0
string sql = "SELECT [identifier] FROM [information] WHERE INSTR([identifier]," + identifier +") != 0 ";

访问函数 INSTR()

于 2013-07-02T02:53:20.183 回答