【发布时间】:2011-07-12 17:33:29
【问题描述】:
我一直在通过SqlCeConnection 在 C# 中使用 SQL 和数据库。我一直在使用ExecuteReader 读取结果,并使用BigInt 读取读入 Long 的记录 ID 值。
今天我一直在使用基于 COUNT 的语句 ('SELECT COUNT(*) FROM X') 的 SQL 语句,并且一直在使用 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。
【问题讨论】:
-
recordCount 定义为什么?
-
@BoltClock:您可以直接将
int转换为long(实际上您甚至不需要转换,因为有一个可用的隐式转换)。 OP 的问题是您无法将已装箱的int拆箱为long。装箱的值类型(通常)需要拆箱为完全相同的类型。
标签: c# sql-server-ce long-integer int64 int32