DataReader:指定的强制转换无效(Int32)

mol*_*anu 11 .net datareader sqldatareader

为什么在将0转换为整数时SqlDataReader会抛出异常?

?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()}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 25

它不是转换 - 它是演员.同样如下:

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

在这两种情况下,a short都不是int.

如果不确定类型,您可以尝试:

int i = Convert.ToInt32(dataReader.GetValue(3));
Run Code Online (Sandbox Code Playgroud)