2017-09-13 6 views
0

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?

Répondre

0

Oracle SQL does not have a BOOLEAN type de données (PL/SQL does mais pas SQL).

IsBroker est défini comme NUMBER(1).

Vous devez convertir votre valeur booléenne à une valeur numérique comme Oracle ne saura pas comment vous avez l'intention d'effectuer la conversion (false/true =>0/1 ou -1/+1 ou -7/3).

+0

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

+0

@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

+0

@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. –