我正在尝试使用SqlDataReader读取smallint
列值。
dataReader.GetInt32()
抛出异常为“指定的强制转换无效。”
但是
dataReader.GetInt16()
工作正常。
你能解释为什么GetInt32()失败,如果Int16可以像这里一样分配给Int32
Int16 i16 = 1;
Int32 i32 = i16;
答案 0 :(得分:8)
GetInt##()
方法查找完全匹配,'无效转换'错误是关于DbType到ClrType的转换。
你是正确的,GetInt32()本来可以读取较小的类型,但那也可能无意中发生。
GetDouble()
在没有抱怨的情况下int
,long
甚至decimal
阅读?{
我觉得最好不要。