我使用以下代码将数据从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;
}
答案 0 :(得分:10)
我猜这个值是以框double
而不是float
的形式返回的。尝试使用
(float) dataReader.GetDouble(fieldOrdinal);
答案 1 :(得分:5)
我会很好地预测返回的数据类型实际上是(盒装)双倍。
更新: 其实我刚发现一个SQL float映射到MSDN上的.NET double(所以这是你的问题):http://msdn.microsoft.com/en-us/library/ms131092.aspx < / p>
试试这个作为测试:
(float)dataReader.GetDouble(fieldOrdinal);
答案 2 :(得分:2)
原因是SQL Float在.net中是双倍的。您可以看到完整的映射here。因此,正如其他人建议您需要读取double然后尝试将其转换为float。
(float)dataReader.GetDouble("Power");