2017-10-18 155 views
0

我试图将参数传递给Dapper以便在Oracle数据库中进行选择查询,但不知何故,它不能与“:”标识符一起使用。将参数传递给Dapper为Oracle数据库选择查询

它工作正常使用字符串连接:
string req = "SELECT * FROM contact WHERE code_comite = '"; req += user.Comite + "' AND (pers_name LIKE '"; req += name + "%' OR pers_surname LIKE '" + name + "%')"; contacts = db_conn.Query<Contact>(req).ToList();

但不能与小巧玲珑的参数传递:

string comite = "'" + user.Comite + "'";//e.g. comite = '120' 
name = "'" + name + "%'";//e.g. name = 'John%' 
contacts = db_conn.Query<Contact>("SELECT * FROM contact WHERE code_comite = :code_comite AND (pers_nom LIKE :search OR pers_prenom LIKE :search)", new { code_comite = comite, search = name }).ToList(); 

应该使用相同字符串,但第二个示例返回我什么。

回答

1

传递参数时,不需要在值的周围加上引号。相反,这会导致失败,因为引擎将搜索包含由文字引号包围的值的列。
只需使用纯文本

string comite = user.Comite; 
name = name + "%"; 
contacts = db_conn.Query<Contact>(@"SELECT * FROM contact 
      WHERE code_comite = :code_comite 
      AND (pers_nom LIKE :search 
       OR pers_prenom LIKE :search)", 
    new { code_comite = comite, search = name }).ToList(); 
+0

谢谢史蒂夫,它的工作原理 – BadMiscuit