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);
在我传递特殊字符(例如([],!,@ etc)时的相似参数中,它崩溃会给我一个错误无效的模式字符串并且还传递%作为参数它给了我一个来自DB的全部记录。
答案 0 :(得分:3)
方括号在Access SQL LIKE
表达式中具有特殊含义(参考:here),因此单个[
字符必须转义为[[]
。例如,以下代码段将失败并显示“无效的模式字符串”...
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();