Je n'arrive pas à insérer un booléen dans une base de données Oracle 12 à l'aide de Dapper.Impossible d'insérer une valeur booléenne dans Oracle à l'aide de Dapper
L'exception que je reçois est ORA-00932: inconsistent datatypes: expected NUMBER got BOOLEAN
CommandText est
INSERT INTO crossqueryb.counterparty (Id,Name,IsBroker,DefaultPortfolioId) VALUES (:Id,:Name,:IsBroker,:DefaultPortfolioId)
IsBroker
est défini comme un NUMBER(1)
. Lorsque j'inspecte OracleParameter, les propriétés DbType et OracleDbType sont définies sur Boolean
. La valeur est false
, le type de la valeur est object {bool}
.
Les paramètres sont passés à la méthode de requête en tant que IDictionary<string,object>
, pas en tant que type de domaine réel ou de type anonyme.
Ai-je besoin d'écrire un handhandler personnalisé pour cela ou est-ce que je manque quelque chose d'autre?
Ouais, je m'attendais à ce que Dapper le fasse pour moi, est-ce que vous dites que ce n'est pas le cas et que j'ai besoin d'écrire mon propre TypeHandler? – John
@John Je n'ai pas utilisé Dapper, donc je peux seulement vous dire ce qui se passe du côté d'Oracle. Cependant, [cette réponse] (https://stackoverflow.com/q/23502237/1509264) et [cette page de documentation] (https://stackoverflow.com/documentation/dapper/6/type-handlers/11/converting- varchar-to-ihtmlstring) suggérerait, oui, un gestionnaire de type est la réponse. – MT0
@John: Selon cette réponse: https://stackoverflow.com/questions/42365865/pass-c-sharp-bool-as-parameter-to-oracle-using-dapper, le TypeHandler ne s'applique qu'aux requêtes, pas aux paramètres . Vous pouvez essayer la solution à partir de cette réponse. –