2016年7月22日 星期五

C# 寫入Oracle 加入變數時出現ArgumentOutOfRangeException | C# insert Oracle db get ArgumentOutOfRangeException when add parameter

語言:C#
DLL:Oracle.DataAccess.Client; 4.121.1.0

在做新增資料時,插入一個常數整數變數,就出錯在那一行

private const int _DEFAULT_VALUE = 0;
OracleCommand oc = new OracleCommand();
oc.CommandText = "insert into Table1 (col1) values(:val1)";
oc.Parameters.Add("val1", _DEFAULT_VALUE);--這行出錯


得到ArgumentOutOfRangeException

Google找到一篇文章
http://brianseekford.com/wordpress/?p=100
說在插入0的時候也出錯了
有個解決辦法是這樣

oc.Parameters.Add("val1", (object)_DEFAULT_VALUE);

把變數轉型為object,結果就過了!
我想應該是驅動程式的BUG

20170510補記
自己又遇到同樣問題 狗回來這一篇
不過有新解法
 oc.Parameters.Add(new OracleParameter(){
                                        ParameterName=":FLAG",
                                        Value=(short)0,
                                        OracleDbType=OracleDbType.Int16
                                    });

這樣的方式也是OK