为什么这个指定的演员无效?

San*_*.91 3 c# sql floating-point sqldatareader

在此输入图像描述

我使用以下代码将数据从sql reader映射到C#Objects.在代码和sql数据库中,Power的数据类型为float .. y是否发生了强制转换错误消息?

private Entity.PanelDetail MapDataReader(SqlDataReader dataReader)
    {
        Entity.PanelDetail panelDetail = new Entity.PanelDetail();
        panelDetail.IdPanelDetail = DataReaderExtensions.GetStringOrNull(dataReader, "idPanelDetail");
        panelDetail.IdDeviceDetail = DataReaderExtensions.GetStringOrNull(dataReader, "idDeviceDetail");
        panelDetail.Power = DataReaderExtensions.GetFloatOrNull(dataReader, "Power");
        panelDetail.Current = DataReaderExtensions.GetFloatOrNull(dataReader, "Current");
        panelDetail.Length = DataReaderExtensions.GetFloatOrNull(dataReader, "Length");
        panelDetail.Width = DataReaderExtensions.GetFloatOrNull(dataReader, "Width");
        panelDetail.CreatedBy = DataReaderExtensions.GetStringOrNull(dataReader, "CreatedBy");
        panelDetail.CreationDate = DataReaderExtensions.GetDateTimeOrNull(dataReader, "CreationDate");
        panelDetail.ModifiedBy = DataReaderExtensions.GetStringOrNull(dataReader, "ModifiedBy");
        panelDetail.ModifiedDate = DataReaderExtensions.GetDateTimeOrNull(dataReader, "ModifiedDate");
        panelDetail.IsActive = DataReaderExtensions.GetBoolOrNull(dataReader, "IsActive");
        panelDetail.IsDeleted = DataReaderExtensions.GetBoolOrNull(dataReader, "IsDeleted");

        return panelDetail;
    }
Run Code Online (Sandbox Code Playgroud)

Sam*_*eer 11

我猜这个值是以盒装double而不是以盒子形式返回的float.尝试使用

 (float) dataReader.GetDouble(fieldOrdinal);
Run Code Online (Sandbox Code Playgroud)

请参阅映射CLR参数数据


Tim*_*out 5

我会很好地预测返回的数据类型实际上是(盒装)双倍.

更新:实际上我刚刚发现一个SQL float映射到MSDN上的.NET double(所以这是你的问题): http: //msdn.microsoft.com/en-us/library/ms131092.aspx

试试这个作为测试:

(float)dataReader.GetDouble(fieldOrdinal);