不能使用Dapper在Oracle中插入布尔值

问题描述:

我在使用Dapper将布尔值插入Oracle 12数据库时遇到了困难。不能使用Dapper在Oracle中插入布尔值

我得到的例外是 ORA-00932: inconsistent datatypes: expected NUMBER got BOOLEAN

在CommandText是

INSERT INTO crossqueryb.counterparty (Id,Name,IsBroker,DefaultPortfolioId) VALUES (:Id,:Name,:IsBroker,:DefaultPortfolioId) 

IsBroker定义为NUMBER(1)

当我检查OracleParameter时,DbType和OracleDbType属性设置为Boolean。值为false,值的类型为object {bool}

参数作为IDictionary<string,object>传递给查询方法,而不是实际的域类型或匿名类型。

我需要为此编写一个自定义的类型处理程序还是缺少其他明显的东西?

Oracle SQL does not have a BOOLEAN数据类型(PL/SQL does但不是SQL)。

IsBroker定义为NUMBER(1)

您需要将您的布尔值转换为数值甲骨文会不知道你打算如何执行转换(false/true =>0/1-1/+1-7/3)。

+0

是的我有点期待Dapper这样做对我来说,你是说它不,我需要写我自己的TypeHandler? – John

+0

@John我没有使用过Dapper,所以只能告诉你Oracle侧发生了什么。但是,[此答案](https://*.com/q/23502237/1509264)和[此文档页面](https://*.com/documentation/dapper/6/type-handlers/11/converting- varchar-to-ihtmlstring)会建议,是的,类型处理程序是答案。 – MT0

+0

@John:根据这个答案:https://*.com/questions/42365865/pass-c-sharp-bool-as-parameter-to-oracle-using-dapper,TypeHandler只适用于查询,而不是参数。你可以尝试从答案的解决方案。 –