所以我认为(int?)的重点是如果数据库有null,则取一个int或null。 但是我收到错误
其他信息:指定的强制转换无效。
VehicleGroupID
是给出错误的那个,因为它在数据库中为 NULL。 它是(int?),所以它应该能够接受空值,对吗?这不是(int? 如果没有,允许空值的最干净解决方案是什么,因为实际上我必须从数据库中获取更多可为空的整数。
这是我的代码:
public int? VehicleClassID { get; set; }
public int? VehicleGroupID { get; set; }
public void getVehicleModelDetails ()
{
DataSet retVal = new DataSet();
SqlConnection sqlConn = (SqlConnection)_context.Database.Connection;
SqlCommand cmdReport = new SqlCommand("storedProc", sqlConn);
SqlDataAdapter daReport = new SqlDataAdapter(cmdReport);
using (cmdReport)
{
cmdReport.CommandType = CommandType.StoredProcedure;
daReport.Fill(retVal);
}
// Set buyer vehicle details
var row = retVal.Tables[0].Rows[0];
VehicleClassID = (int?)row["VehicleClassID"];
VehicleGroupID = (int?)row["VehicleGroupID"];
}
仅供参考:我使用的是 EF6,但存储过程返回自定义数据,所以我采用了这个。
据我所知,Field
扩展方法都支持可为空的类型。因此,下面的行应该作为一个魅力:
VehicleClassID = row.Field<int?>("VehicleClassID");