2010-01-26 18 views
3

爲什麼我得到這個錯誤?不能將DBNULL值插入到sql server中

Object cannot be cast from DBNull to other types. 

當我插入空值在SQL Server 2005

這裏是我的代碼數字類型,

if (MeasurementTr.Visible == true) 
    { 
     materialIn.measurementId = Convert.ToInt64(DlMeasurement.SelectedValue.ToString()); 
    } 
    else 
    { 
     materialIn.measurementId = Convert.ToInt64(DBNull.Value); 
    } 

編輯

這是正確的?

materialIn.measurementId = (Convert.ToInt64(DlMeasurement.SelectedValue.ToString()) != 0) ? Convert.ToInt64(DlMeasurement.SelectedValue.ToString()) : 0; 
+0

不,您不能將DBNull轉換爲Int64。您首先需要驗證對象值不是DBNull! – 2010-01-26 05:20:58

+1

這是'else'塊,這是問題所在。我確定'if'塊沒問題('ToString'永遠不會返回'DBNull.Value')。正如我所說 - 在DataRow上使用'SetNull'或'SetmeasurementIdNull'方法,如果是這樣的話,或者如果它是不可空的,只是將其設置爲'null'或'default(Int64)'。 – Aaronaught 2010-01-26 05:29:50

+0

@Aaronaught我錯過了其他部分......你正確和+1。 – 2010-01-26 05:44:00

回答

5

由於代碼試圖在Convert.ToInt64中執行操作,因此無法將DBNull.Value轉換爲Int64DBNull.Value表示「未知」或「不存在」,因此沒有邏輯轉換爲任何其他數據類型。

如果materialIn實例是某種形式的強類型DataRow,它將有一個SetMeasurementIdNull方法,這是您需要使用的方法。如果您使用Linq to SQL或EF,則根本不需要處理DBNull,而只需編寫materialIn.measurementId = null

1

因爲這Object cannot be cast from DBNull to other types.

所以,你需要做的是檢查值DBNull

materialIn.measurementId = DlMeasurement.SelectedValue == DBNull.Value? 0:Convert.ToInt64(DlMeasurement.SelectedValue.ToString());

+0

@Mendy運算符'=='不能應用於'string'和'System.DBNull'類型的操作數 – bala3569 2010-01-26 05:05:26

+0

但是SelectedValue是對象,不是嗎? – 2010-01-26 05:09:04

+0

你能用正確的答案編輯我的問題嗎 – bala3569 2010-01-26 05:11:02

0

DBNull不會轉換爲Int64。您將需要使用一個可爲空的int值,然後將值存儲在值中,或者對該值執行某些操作以表示可以存儲在屬性中的null(例如0)。