Pourquoi Dapper supprime-t-il les caractères de préfixe de paramètre lors de la création d'une commande?

c# dapper sybase-ase

Question

J'appelle une procédure stockée dans Sybase ASE, en utilisant le fournisseur "ASEOLEDB.1".

Le SP prend un seul argument varchar (255), appelé @PricePreference, dont la valeur par défaut est NULL dans le SP.

J'utilise la méthode QueryMultiple de Dapper et le passage d'un objet DynamicParameters:

var parameters = new DynamicParameters();
parameters.Add("@PricePreference", "Foo");
var reader = dbConnection.QueryMultiple("myProcName", parameters, commandType: CommandType.StoredProcedure);

Ce code se comporte comme si je ne passais pas du tout le paramètre. Il semble que c'est parce que les AddParameters () sur la classe DynamicParameters Dapper appelle Clean () sur mon nom de paramètre qui supprime le « @ » préfixe (ou l'équivalent pour d' autres SGBD » - voir « Travailler avec le paramètre Placeholders » sur MSDN ici ).

Sans le préfixe '@', Sybase semble incapable de faire correspondre l'argument.

Inversement, lorsque je commente l'appel à Clean (), j'obtiens le résultat correct de la requête.

Quelle est la justification de la suppression du préfixe '@'?

Réponse acceptée

En bref: cela simplifie énormément le code et vérifie si nous n'avons besoin que d'un seul scénario. Dans tous les autres SGBDR: cela fonctionne aussi bien avec et sans - et bien sûr, lorsque vous spécifiez des noms de paramètres via les propriétés d'objet qu'ils sont: sans - donc c'était la méthode évidente de tobartage. Si cela ne fonctionne pas avec un SGBDR particulier, je suis sûr que nous pouvons rechercher des moyens de le résoudre. Probablement juste en faisant confiance à DynamicParameters et en ne les nettoyant pas.




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