I have been playing around with SQL and databases in C# via SqlCeConnection. I have been using ExecuteReader to read results and BigInt values for record IDs which are read into Longs.
Today I have been playing with SQL statements that use COUNT based statements ('SELECT COUNT(*) FROM X') and have been using ExecuteScalar to read these single valued results.
However, I ran into an issue. I can't seem to store the values into a Long data type, which I have been using up to now. I can store them into Int64's.
I have been using BigInt for record IDs to get the maximum potential number of records.
A BigInt 8 bytes therefore is an Int64. Isn't a Long equal to an Int64 as both are 64-bit signed integers?
Therefore, why can't I cast an Int64 into a Long?
long recordCount =0;
recordCount = (long)selectCommand.ExecuteScalar();
The error is:
Specified cast is not valid.
I can read a BigInt into a Long. It is not a problem.
I can't read an SQL COUNT into a long.
COUNT returns an Int (Int32), so the problem is in fact casting an Int32 into a long.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…