我正在使用以下 SQL 查询来搜索数据库。
string sql = "SELECT [identifier] FROM [information] WHERE [identifier] LIKE '" + identifier + "%'"
;
当我输入“m”搜索“Microsoft”时,它会找到 Microsoft,但如果我输入“o”,它不会找到 Microsoft。
我如何更改 SQL 以便它找到包含该特定单词的所有内容?
搜索字母时它不搜索字符串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
块来正确处理异常string sql = "SELECT [identifier] FROM [information] WHERE INSTR([identifier]," + identifier +") != 0 ";