DataReader: Specified cast is not valid (Int32)

.net, datareader, sqldatareader

Solution

It isn't a convert - it is a cast. The same as:

short x = 0;
object y = x;
int z = (int)y; // BOOM! InvalidCastException Specified cast is not valid.

In both cases, a `short` is not an `int`.

If unsure of the type, you might try:

int i = Convert.ToInt32(dataReader.GetValue(3));

Problem

Why does SqlDataReader throw an exception when converting 0 to integer? ``` ?dataReader(3) 0 {Short} Short: 0 ?dataReader.GetInt16(3) 0 ?dataReader.GetInt32(3) {"Specified cast is not valid."} _HResult: -2147467262 _message: "Specified cast is not valid." Data: {System.Collections.ListDictionaryInternal} HelpLink: Nothing HResult: -2147467262 InnerException: Nothing IsTransient: False Message: "Specified cast is not valid." Source: "System.Data" StackTrace: " at System.Data.SqlClient.SqlBuffer.get_Int32() at System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i)" TargetSite: {Int32 get_Int32()} ```

Original source