国际?不适用于数据库空值



所以我认为(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");

最新更新