我在以下行收到无效的演员表异常:
DestMinSeq = (long)rdr["MinSeq"];
当我将查询更改为将 MinSeq 转换为 BIGINT 而不是 INT 时,它可以工作。
问题:为什么将空头转为多头是非法的?
环境:
VS 2012 SSIS project script task.
ADO.NET connection manager.
SQL Server 2012.
问题:为什么将空头转为多头是非法的?
您正在尝试将盒装短线转换为长线。您可以在没有数据库的情况下看到这一点:
int x = 10;
object o = x;
long y = (long) o; // Bang!
如果您在拆箱时转换为正确的类型,然后转换为您真正想要的类型,就可以了:
DestMinSeq = (long)(int)rdr["MinSeq]";
(我怀疑你想要int
而不是short
,但你必须检查。)
问题在于它rdr["MinSeq"]
的类型object
(实际上是一个int
装箱的对象)。当您尝试将其强制转换object
为 along
时,它会给您一个无效的强制转换,因为编译器不能简单地将类型的对象object
强制转换为实际装箱类型(在这种情况下int
)之外的其他东西。
你可以试试这个,
DestMinSeq = Convert.ToInt64(rdr["MinSeq"]);
或者@Jon Skeet 的建议,实际上看起来更漂亮,
DestMinSeq = (long)(int)rdr["MinSeq"];