2017-09-13 11 views
0

Dapperを使用してOracle 12データベースにブール値を挿入する際に問題があります。Dapperを使用してOracleにBooleanを挿入できません

私が手に例外が 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>としてQueryメソッドに渡されます。

これにカスタムタイプハンドラを記述する必要がありますか、それとも明白な何かが欠けていますか?

答えて

0

Oracle SQL does not have a BOOLEANデータ型(PL/SQL doesではなくSQL)。

IsBrokerは、NUMBER(1)と定義されます。

は、Oracleを使用すると、コンバージョン(false/true =>0/1または-1/+1または-7/3)を実行するつもり方法を知らないので、数値に自分のブール値を変換する必要があります。

+0

ええ、私はDapperがそれをやり遂げることを期待しています。あなたはそれがそうではないと言っていますか、自分のTypeHandlerを書く必要がありますか? – John

+0

@John私はDapperを使用していないので、オラクル側から何が起きているかだけを伝えることができます。しかし、[この回答](https://stackoverflow.com/q/23502237/1509264)と[このドキュメントのページ](https://stackoverflow.com/documentation/dapper/6/type-handlers/11/converting- varchar-to-ihtmlstring)は、型ハンドラが答えであることを示唆しています。 – MT0

+0

@ジョン:この答えによると:https://stackoverflow.com/questions/42365865/pass-c-sharp-bool-as-parameter-to-oracle-using-dapper、TypeHandlerはクエリではなくパラメータにのみ適用されます。その答えから解決策を試すことができます。 –

関連する問題