¿Por qué Dapper elimina cualquier carácter de prefijo de parámetro al construir un comando?

c# dapper sybase-ase

Pregunta

Estoy llamando a un procedimiento almacenado en Sybase ASE, utilizando el proveedor "ASEOLEDB.1".

El SP toma un único argumento varchar (255), llamado @PricePreference, que está predeterminado en NULL en el SP.

Estoy utilizando el método Dapper's QueryMultiple y paso un objeto DynamicParameters:

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

Este código se comporta como si no pasara el parámetro en absoluto. Parece que esto se debe a que el método AddParameters () en la clase DynamicParameters de Dapper llama a Clean () en mi nombre de parámetro que elimina el prefijo '@' (o el equivalente para otro DBMS '- vea' Trabajar con marcadores de posición de parámetros 'en MSDN aquí ).

Sin el prefijo '@', Sybase parece incapaz de hacer coincidir el argumento.

Por el contrario, cuando comento la llamada a Clean (), obtengo el resultado correcto de la consulta.

¿Cuál es la razón detrás de eliminar el prefijo '@'?

Respuesta aceptada

En resumen: simplifica una gran cantidad de código y comprueba si solo tenemos que preocuparnos por un escenario. En cualquier otro RDBMS: funciona igual de bien con y sin - y, por supuesto, cuando especifica nombres de parámetros a través de propiedades de objeto son: sin - por lo que era la forma obvia de estandarizar. Si esto no funciona con un RDBMS en particular, estoy seguro de que podemos investigar formas de solucionarlo. Presumiblemente solo confiando en DynamicParameters y no limpiándolos.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow