2017-04-27 67 views
1

我使用的ODP的OracleParameter構造:ODP淨甲骨文參數的構造函數與Boolean對象

public OracleParameter(string parameterName, object obj); 

當我通過不同類型的像int或datetime對象,它工作正常。 但是當我使用bool的是這樣的:

new OracleParameter("paramName", true) 

其與 「System.ArgumentException」 崩潰。

爲什麼這不適用於bool值? 是否存在這種不起作用的已知類型?

我使用的是Oracle ManagedDataAccess.dll v4.121.2.0

+0

你在輸入值的構造函數中做了什麼? – WhileTrueSleep

+0

這不是我自己的構造函數。它來自odp .NET [鏈接](https://docs.oracle.com/database/121/ODPNT/OracleParameterClass.htm#i1011308) –

回答

0

Oracle不支持bool值的數據類型爲它的列(PL/SQL是另一回事)。

您首先必須檢查Oracle中的bool字段/參數的數據類型。

如果它像NUMBER使用下面的代碼:

new OracleParameter("paramName", OracleDbType.Int16, 1); 

這裏第三paremeter是NUMBER值的大小。

,正如你在評論mentionned,您可以使用此constructor

public OracleParameter(string parameterName, OracleDbType type, object obj, 
    ParameterDirection direction); 

,它允許你跳過定義大小。


否則我將其轉換爲NUMBER因爲OracleDbType枚舉不包含BOOLEAN值。

我在創建新的Oracle參數時總是指定OracleDbType。它使事情更加明確,並防止類錯誤。

+0

謝謝你,這是我需要的信息的一部分。我在哪裏得到這些信息,而不是絆倒他們?有沒有其他類型的地方,這不起作用? –

+0

@DanF至於其他類型,這不起作用,我現在想不出任何權利。順便指定所有參數的類型是一種很好的做法,除了bool類型之外,大多數都是非常明顯的。如果這解決了您的問題,請將答案標記爲已接受。謝謝。 – Gilles

+0

您發佈了錯誤的構造函數。一個需要ist這一個[鏈接](https://docs.oracle.com/database/121/ODPNT/OracleParameterClass.htm#i1011428) –