2015-11-22 98 views
2

所以我有這個舊的代碼,使用Firebird,我從那裏代碼,因爲它工作完美,但在這裏沒有。並拋出一個InvalidCastException。C#拋出一個枚舉InvalidCastException錯誤

所以笏我豈

animal.FeedScheduleType = (BcFeedScheduleType)drAnimal["feedschedule_type"]; 

所以我儘量拉出來的東西我的數據表,並將其放置在animal.FeedScheduleType。現在我投點AA公共枚舉

public enum BcFeedScheduleType 
{ 
    Default = 0, 
    FromList = 1, 
    Group = 2 
} 

和animal.FeedScheduleType是

private BcFeedScheduleType _feedScheduleType; 

public BcFeedScheduleType FeedScheduleType 
    { 
     get { return _feedScheduleType; } 
     set { _feedScheduleType = value; } 
    } 

但每當它擊中這個它拋出我的InvalidCastException的,我不知道爲什麼,我搜索在這裏和谷歌,但爲無法找到任何關於這樣的演員陣容。

編輯:在數據庫中的類型是整數

+0

數據庫中記錄的數據類型是什麼? –

+0

我把它作爲一個整數在數據庫裏面, –

+0

嘗試從聲明爲_var temp_的臨時變量中讀取數據庫的返回值,然後使用調試器在嘗試任何強制轉換之前檢查數據庫返回的值。 – Steve

回答

2

試試這個:

animal.FeedScheduleType = (BcFeedScheduleType)Convert.ToInt32(drAnimal["feedschedule_type"]); 

這裏是一個fiddle

1

您是否嘗試過鑄造爲int第一?

animal.FeedScheduleType = (BcFeedScheduleType)(int)drAnimal["feedschedule_type"]; 
+0

我只是試過了,但它引發了同樣的錯誤我害怕 –

0

我的猜測是你的drAnimal正在返回一個字符串,而不是一個int。如果是這種情況,那麼

animal.FeedScheduleType = (BcFeedScheduleType)Int.Parse(drAnimal["feedschedule_type"]);

如果你不知道drAnimal是什麼類型的,你可以這樣做:

var feedschedule_type = drAnimal["feedschedule_type"]; Console.WriteLine("feedschedule_type is {0}", typeof(feedschedule_type));

基本上,你需要得到它變成一個int,然後像你在問題中所做的那樣使用標準轉換。

最後,確保提要計劃類型具有有效值。也就是說,確定它的值是0,1或2.

0

我其實剛剛碰到這個時候,最近使用的是SqlParameter

我的猜測是drAnimal["feedschedule_type"]被存儲爲SqlDbType.Intobject。爲了投我的參數,我不得不做類似如下的內容:

(int)(SqlDbType.Int)(drAnimal["feedschedule_type"]); 

您可能需要使用類似的鏈以獲得實際int值,並將其強制到您的枚舉。

+1

是的,你是對的。但是,將db字段轉換爲整數的最好方法是使用Convert。ToInt32(drAnimal [「feedschedule_type」])'如果該字段不可爲空。如果它是可空的,那麼最好是使用'drAnimal [「feedschedule_type」]作爲int?'。 –

+0

可能,但'轉換'失敗悲慘,如果這種類型在技術上是'SqlDbType.Variant',因此最初的演員。 – Eris