dapper query - Correctif pour l'erreur "Unclosed guillemet near ..."

c# dapper

Question

Cette requête fonctionne; c'est-à-dire qu'il renvoie les résultats attendus:

var r = sql.Query<T>("select * from TableName where Name = '" + name + "'");

mais, si l'une des valeurs 'names' contient une apostrophie (ce qui est vrai), alors une exception est levée '{"Syntaxe incorrecte près de' Resources '. - pour tenter de résoudre ce problème , ma requête ne renvoie plus aucun résultat; mais ça devrait.

J'ai tenté de modifier le code de plusieurs manières, mais aucun résultat n'est renvoyé avec l'une des modifications suivantes:

var r = sql.Query<T>("select * from TableName where Name = '@name'", new { name });

ou

var args = new DynamicParameters(name);
var r = sql.Query<T>("select * from TableName where Name = '@name'", args);

ou

var args = new DynamicParameters(); args.AddDynamicParams(new { name });
var r = sql.Query<T>("select * from TableName where Name = '@name'", args);

ou

var args = new DynamicParameters(); args.Add("@name", name);
var r = sql.Query<T>("select * from TableName where Name = '@name'", args);

C'est probablement quelque chose de trivial que je n'ai tout simplement pas encore compris le concept pour ... mais je suis sur le point d'avoir passé trop de temps à essayer de comprendre - d'où la question.

Réponse acceptée

Utiliser un paramètre est la bonne façon de procéder. Vous ne voulez absolument pas mettre la valeur dans la requête elle-même, comme vous l'avez fait dans votre premier extrait. Cependant, vous avez mis le @name entre guillemets, ce qui signifie qu'il est traité comme un littéral de chaîne ... il recherche une valeur de nom exactement @name plutôt que la valeur du paramètre @name . Tu veux:

var r = sql.Query<T>("select * from TableName where Name = @name", new { name });

(C'est probablement la manière la plus simple de transmettre les paramètres, même si les autres approches devraient également fonctionner.)

Maintenant, je n'ai pas utilisé Dapper moi-même, mais c'est ce à quoi je m'attendais ...



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi