簡體   English   中英

為什么這個指定的演員無效?

[英]why is this specified cast not valid??

在此輸入圖像描述

我使用以下代碼將數據從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;
    }

我猜這個值是作為盒裝double而不是float 嘗試使用

 (float) dataReader.GetDouble(fieldOrdinal);

請參閱映射CLR參數數據

我會很好地預測返回的數據類型實際上是(盒裝)雙倍。

更新:實際上我剛剛發現一個SQL float映射到MSDN上的.NET double(所以這是你的問題): http//msdn.microsoft.com/en-us/library/ms131092.aspx

試試這個作為測試:

(float)dataReader.GetDouble(fieldOrdinal);

原因是SQL Float在.net中是雙倍的。 您可以在此處查看完整的映射。 因此,正如其他人建議您需要讀取double然后嘗試將其轉換為float。

(float)dataReader.GetDouble("Power");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM