私はSqlCeConnectionを介して C# で SQL とデータベースをいじっています。ExecuteReaderを使用して、Longs に読み取られるレコード ID の結果とBigInt値を読み取っています。
今日、私は COUNT ベースのステートメント ('SELECT COUNT(*) FROM X') を使用する SQL ステートメントで遊んでおり、これらの単一値の結果を読み取るためにExecuteScalarを使用しています。
しかし、私は問題に遭遇しました。今まで使用していたLongデータ型に値を格納できないようです。それらを Int64 に格納できます。
レコード ID に BigInt を使用して、潜在的な最大レコード数を取得しています。
したがって、BigInt 8 バイトは Int64 です。どちらも 64 ビットの符号付き整数であるため、Long は Int64 と等しくありませんか?
したがって、Int64 を Long にキャストできないのはなぜですか?
long recordCount =0;
recordCount = (long)selectCommand.ExecuteScalar();
エラーは次のとおりです。
指定されたキャストは無効です。
BigInt を Long に読み込むことができます。問題ありません。SQL COUNT を long に読み込めません。
COUNT は Int (Int32) を返すため、実際には Int32 を long にキャストすることが問題です。