odp 加固 mysql_ODP 使用 ArrayBind 时可能会遇到的巨坑 'System.IConvertible' 的解决方法...

Unable to cast object of type 'System.Nullable`1[System.Int16][]' to type 'System.IConvertible'

一段代码99%不会出错,0.1%会报上边的错,debug费了老鼻子时间,发现此坑很深。异常是 cmd.ExecuteNonQuery() 抛的,实际是 para.Value = list.Select(d => d.ID).ToArray() 引起的,但是此句实在是没毛病啊!。。。。。。。。哪?。。。。。。。。而最终原因是数据源数量为0,list.Count=0。list.Count=0的情况下,用 ArrayBind 实际本无意义了,所以解决方案是加上行判断if(list.Count>0)。

而99%不报错是99%的情况下数据不为空。

var q = from d in db.tbl  select d;

var list = q.ToList();

if(list.Count>0)//如果数据集为空还执行,会报 ...'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%这里报异常

cmd.Parameters.Add(para);

cmd.ExecuteNonQuery();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值