我一直在使用 SqlCeConnection 在 C# 中处理 SQL 和数据库。我一直使用ExecuteReader 读取结果,并使用 BigInt 值作为记录 ID,将其读入 Long 中。
今天我在处理基于 COUNT 的语句时遇到了问题 ("SELECT COUNT(*) FROM X") ,并使用 ExecuteScalar 读取单个值的结果。
然而,我遇到了一个问题。我似乎无法将这些值存储到 Long 数据类型中,而我到目前为止一直在使用它们。我只能将它们存储到 Int64 中。
我一直使用 BigInt 作为记录 ID 来获取最大潜在记录数。
BigInt 8 字节因此是一个 Int64。难道 Long 不等于 Int64,因为两者都是有符号的 64 位整数吗?
因此,为什么我不能将 Int64 强制转换为 Long?
今天我在处理基于 COUNT 的语句时遇到了问题 ("SELECT COUNT(*) FROM X") ,并使用 ExecuteScalar 读取单个值的结果。
然而,我遇到了一个问题。我似乎无法将这些值存储到 Long 数据类型中,而我到目前为止一直在使用它们。我只能将它们存储到 Int64 中。
我一直使用 BigInt 作为记录 ID 来获取最大潜在记录数。
BigInt 8 字节因此是一个 Int64。难道 Long 不等于 Int64,因为两者都是有符号的 64 位整数吗?
因此,为什么我不能将 Int64 强制转换为 Long?
long recordCount =0;
recordCount = (long)selectCommand.ExecuteScalar();
错误信息为:
指定的强制类型转换无效。
我可以将 BigInt 转换成 Long,这不是问题。 但我无法将 SQL COUNT 转换成 long。
COUNT 返回 Int(Int32),所以问题实际上是将 Int32 强制转换成 long。
int
强制转换为long
(实际上,你甚至不需要强制转换,因为有一个隐式转换可用)。 OP的问题在于,您无法将装箱的int
解箱为long
。装箱的值类型(通常)需要解箱为完全相同的类型。 - LukeH