小编典典

为什么从short转换为int会失败?

sql

我们有一些代码将数据从Microsoft Access数据库存档到MS SQL
Server数据库中。假设我们已经从Access表中填充了一个数据读取器,并且正在为SqlCommand添加一个参数以准备插入,那么我们有一个类型转换失败了。这是代码:

oSqlServerDbCmd_ForInsert.Parameters.AddWithValue("@Duration",
     (int) oReader["Duration"]);

oReader中的字段实际上是一个Access
Integer,在C#中是简称。如果我们在这里做空,那没有问题。但是,如果将其强制转换为int,则代码将引发InvalidCastException。我可能会误读MSDN文档中的内容

“存在从short到int,long,float,double或decimal的预定义隐式转换。”

…但是听起来这应该可行(我的推理是,如果定义了隐式转换,为什么显式类型转换不起作用?)。我意识到强制转换甚至是没有必要的,因为AddWithValue接受一个对象,因此我们实际上已经从代码中删除了强制转换,但是我很乐意看到一个解释,说明这种强制转换失败的原因,以防万一我们遇到这样的情况。未来。


阅读 203

收藏
2021-04-22

共1个答案

小编典典

您手中拥有的是 拆箱
的实例。特别是在取消装箱时,您只能将装箱到最初装箱的值的类型;如果该类型是A,并且您要取消对B的装箱操作, 则是否存在从A到B的隐式转换都没关系
(取消装箱仍将失败)。

有关相关说明,请参见Eric
Lippert关于该主题的经典博客文章

2021-04-22