2017-10-18 21 views
0

J'essaie de passer des paramètres à Dapper pour une requête de sélection dans une base de données Oracle, mais de toute façon, cela ne fonctionne pas avec l'identificateur ":".Passer des paramètres à Dapper Sélectionner une requête pour la base de données Oracle

Il fonctionne très bien en concaténation de chaîne:
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();

Mais pas avec les paramètres Dapper passant:

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(); 

Il devrait utiliser la même chaîne, mais le second exemple me retourne rien.

Répondre

1

Vous n'avez pas besoin de placer des guillemets autour de vos valeurs lorsque vous transmettez un paramètre. Au contraire, cela provoque un échec car le moteur va chercher une colonne contenant vos valeurs entourées par les guillemets littéraux.
Il suffit d'utiliser le texte brut

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

Merci Steve, il travaille – BadMiscuit