【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数据类型,可以缓解这个问题。
tinynit默认会映射成sbyte,byte直接转成sbyte可能丢精度,请问您方便提供产生这个错误的语句么?