最近手贱,将Oracle.ManagedDataAccess升级到19.12.0,原来运行正常(其实有问题)的代码忽然出问题了。
后来一条是发现所有BEGIN END包裹的UPDATE语句,现在都是返回-1,而不是想要的影响的行数了。
其实我所使用的DotNet.Util的底层类库中ExecuteNonQuery();默认值就是-1.
var result = -1;
并且呢,本来ExecuteNonQuery()在执行UPDATE、INSERT以及DELETE语句时,返回值为该命令所影响的行数。这是这个方法的建议用法。
如果用这个执行SELECT语句,不会返回影响的行数或者记录,而返回-1,不论查询结果有没有记录都会返回-1。
同理,如果执行任何CREATE、ALTER、TRUNCATE创建/修改/删除表、字段、索引等语句,同样返回-1。
既然明白了原理,但还得使用一次性多个SQL一起执行,没办法的办法,只能硬着头皮,用个馊主意。
针对BEGIN END的调用,明确知道包含BEGIN END的,就返回一个绝对值,代表成功了。
//return result;
//return -1 if BEGIN END
return Math.Abs(result);
我知道这样做不对,不好。
谁有好办法,分享下。
比方说现在EF里面的做法,或者ORM这些怎么处理的?
等我有时间去研究下SqlSugar或者FreeSql这类ORM看看他们怎么处理的。