ODP 使用 ArrayBind 时可能会遇到的巨坑 'System.IConvertible' 的解决方法
Unable to cast object of type 'System.Nullable`1[System.Int16][]' to type 'System.IConvertible'
?
一段代碼99%不會(huì)出錯(cuò),0.1%會(huì)報(bào)上邊的錯(cuò),debug費(fèi)了老鼻子時(shí)間,發(fā)現(xiàn)此坑很深。異常是?cmd.ExecuteNonQuery() 拋的,實(shí)際是?para.Value = list.Select(d => d.ID).ToArray() 引起的,但是此句實(shí)在是沒(méi)毛病啊!。。。。。。。。哪?。。。。。。。。而最終原因是數(shù)據(jù)源數(shù)量為0,list.Count=0。list.Count=0的情況下,用?ArrayBind 實(shí)際本無(wú)意義了,所以解決方案是加上行判斷if(list.Count>0)。
而99%不報(bào)錯(cuò)是99%的情況下數(shù)據(jù)不為空。
?
var q = from d in db.tbl? select d;
var list = q.ToList();
if(list.Count>0)? ? ?//如果數(shù)據(jù)集為空還執(zhí)行,會(huì)報(bào) ...'System.IConvertible' 的異常
{
var cmd =...
cmd.ArrayBindCount = list.Count();
cmd.BindByName = true;
var para = new Oracle.ManagedDataAccess.Client.OracleParameter();
para.ParameterName = "ID";
para.OracleDbTypeEx = Oracle.ManagedDataAccess.Client.OracleDbType.NVarchar2;
para.Direction = System.Data.ParameterDirection.Input;
para.Value = list.Select(d => d.ID).ToArray();? ? ?//0.1%這里報(bào)異常
cmd.Parameters.Add(para);
cmd.ExecuteNonQuery();
}
轉(zhuǎn)載于:https://www.cnblogs.com/flyGy/p/9482850.html
總結(jié)
以上是生活随笔為你收集整理的ODP 使用 ArrayBind 时可能会遇到的巨坑 'System.IConvertible' 的解决方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 发工资咯:)
- 下一篇: shell基础05 处理用户输入