2017-09-28 85 views
-2

我有一個DataTable充滿了數據庫中的數據。其中一列是int或null。在DataBase中,該列出現在TINYINT類型下。當sql列爲null或tinyint時,指定的轉換無效錯誤

在我的代碼中,我有一個與該表相對應的模型,並且我聲明瞭int類型下的特定屬性。我明白了這樣的:

foreach(var attr in attributes) 
{ 
    MyAttribute cat = new MyAttribute(); 
    cat.glot = attr.isNull("attrGlot") ? 0 : attr.Field<int>("attrGlot"); 
} 

所以basicly我檢查,如果它是一個零和分配0如果不是我把int值。

這是我如何申報MyAttribute一個例子:

public class MyAttribute 
{ 
    public int glot {get;set;} 
} 

但它說具體的轉換無效。我也試過用int?但我想得到int,所以這一列有點讓我迷惑。是否有一個特定類型的內部C#,我可以使用時.Field或我必須以不同的方式做到這一點?

如果我宣佈我爲TINYINT字節我得到一個錯誤「無法施展DBNull.Value鍵入‘System.Byte’。

+0

看來你的數據庫值是'NULL'。什麼樣的數據類型是屬性的? – Adwaenyth

+1

我有點不清楚你用什麼來連接你的數據庫。什麼是'屬性'的類型,然後是什麼類型的'attr'?我可能是錯的,但是在典型的.NET庫中不應該有名稱以小寫字母開頭的公共方法,所以'isNull'似乎指向某種自定義類型? – Shaamaan

+0

你真的*只是*在這裏問這個問題:https://stackoverflow.com/questions/46469252/specified-cast-is-not-valid-inside-when-doing-fieldint –

回答

1

您需要使用IsDBNull以便在(),它會檢查對象的存在是。說「的值是在數據庫中的NULL」,這是檢查在C#/。NET空值不同

然後,您可以像下面這樣做:

cat.glot = attr.IsDBNull("attrGlot") ? 0 : attr.Field<int>("attrGlot"); 

或者,如果仍然原因問題,使用這個:

cat.glot = attr.IsDBNull("attrGlot") ? 0 : (attr.Field<int?>("attrGlot") ?? 0); 
+0

我仍然得到相同的錯誤。指定的轉換無效。 – user5014677

+0

更新了我的答案,請檢查。對'GetValueOrDefault'的調用確保結果始終是Nullable的基礎類型(在本例中爲int),如果沒有值,則使用0。 –

+0

同樣的事情,是否有一種方法可以獲得字段值,而不管列的類型是什麼?因爲我甚至無法檢查它試圖轉換的價值。該列具有null或int。 – user5014677

相關問題