1

当我使用 Like Query 搜索特殊字符时,winform 应用程序崩溃。

strSQL = @"SELECT Patient_ID_Internal ,Patient_ID ,Patient_Title, Patient_Name,
                  Patient_MiddleName_Name, Patient_BirthDate,
                  Patient_RegDate,Patient_UIDNumber 
           FROM Patient_Master 
           WHERE Patient_ID LIKE +@paramPatient_ID +'%'
               AND Patient_Name LIKE +'%'+ @paramPatient_Name +'%'";

objOleDbCommand = new OleDbCommand(strSQL,
    Common.OleDbCommObject.OleDbConnectionObject);
objOleDbCommand.Parameters.AddWithValue("@paramPatient_ID", txtPatientId.Text);
objOleDbCommand.Parameters.AddWithValue("@paramPatient_Name", txtPatientName.Text);

在类似参数中,当我传递特殊字符(例如([]、!、@ 等)时,它崩溃给我一个错误Invalid pattern string并且还传递 % 作为参数,它给了我来自 DB 的完整记录。

4

1 回答 1

3

LIKE方括号在 Access SQL表达式中具有特殊含义(参考:此处[),因此必须将单个字符转义为[[]. 例如,以下代码片段将失败并显示“无效的模式字符串”...

cmd.CommandText =
    "SELECT * FROM Clients WHERE LastName LIKE ?";
string s = "%abc[def%";  // test data
cmd.Parameters.AddWithValue("?", s);
OleDbDataReader rdr = cmd.ExecuteReader();

而这将起作用

cmd.CommandText =
    "SELECT * FROM Clients WHERE LastName LIKE ?";
string s = "%abc[def%";  // test data
cmd.Parameters.AddWithValue("?", s.Replace("[", "[[]"));
OleDbDataReader rdr = cmd.ExecuteReader();
于 2013-11-12T11:51:41.480 回答