注册

.NET驱动DmProvider中错误的TINYINT映射定义

神经蛙 2023/03/20 806 3

【DM版本】:DM8
【问题描述】:Unable to cast object of type 'System.Byte' to type 'System.SByte'.

这个问题出现在达梦提供的DmProvider 1.1.0 版本中,由于达梦内部对TINYINT的定义的CType=5,为System.Byte类型,但是对外提供的文档中写的是SByte类型,同时通过ADO.NET接口定义获取的对象类型也是SByte,这就出现了一个问题。

如果直接使用ADO.NET的接口方法获取一行数据,那么你将得到一个字段为Byte类型数据,如果再通过接口反射方法获得该字段又会得到一个Sbyte的类型,通过强制转换(T)data就会直接产生以上的错误。

以上问题将会导致大部分使用ADO.NET接口原生函数转换类型的ORM框架失效。

【问题来源】:达梦驱动内部将TINYINT转换成了BYTE。

【解决方案】:将数据库的TINYINT换成INT数据类型,可以缓解这个问题。

回答 0
暂无回答
扫一扫
联系客服