2012-01-30 45 views
2

我正在編寫一個將數據插入到訪問數據庫的小應用程序,迄今爲止這麼好但我無法似乎將NULL插入到可空字段中。C#ADO.Net無法確定條件表達式的類型,因爲在DBNull.Value和int之間沒有隱式轉換

我想:

myAccessCommand.Parameters 
    .Add("@IDACCOMPAGNATEUR", OleDbType.Integer).Value = 
     (ActivityRegistration.id_invitee == 0 
     ? DBNull.Value 
     : InviteeWebToSGM[ActivityRegistration.id_invitee]); 

myAccessCommand.Parameters 
    .Add("@IDACCOMPAGNATEUR", OleDbType.Integer).Value = 
     (ActivityRegistration.id_invitee == 0 
     ? (int?)null 
     : InviteeWebToSGM[ActivityRegistration.id_invitee]); 

但兩者不具有不同的問題開展工作。我最初的想法是使用DBNull.Value,但它不能轉換爲任何接近INT的東西,如果它是INT或INT?我的第二次嘗試工作,但返回一個錯誤消息,指出我的領域沒有默認值,但它確實允許NULL。所以我的猜測是ADO.Net中的null與DBNull.value不同......

任何人都可以幫助我嗎?

回答

3

IMO DBNull.Value肯定是要走的路。

嘗試

myAccessCommand.Parameters.Add("@IDACCOMPAGNATEUR", OleDbType.Integer).Value = 
(ActivityRegistration.id_invitee == 0 ? DBNull.Value : (object) InviteeWebToSGM[ActivityRegistration.id_invitee]); 
+0

工作得很好 – 2012-01-30 17:27:19

1

嘗試使用System.Data.SqlTypes.SqlInt32.Null(或System.Data.SqlTypes.SqlInt32.Null.Value,我不能完全肯定,並不能馬上試試):

myAccessCommand.Parameters 
    .Add("@IDACCOMPAGNATEUR", OleDbType.Integer).Value = 
     (ActivityRegistration.id_invitee == 0 
     ? System.Data.SqlTypes.SqlInt32.Null.Value 
     : InviteeWebToSGM[ActivityRegistration.id_invitee]); 
+0

SQLNullValueException中的結果:數據爲空。此方法或屬性不能在Null值上調用; – 2012-01-30 17:26:09

-1

嘗試使用

myAccessCommand.Parameters.Add("@IDACCOMPAGNATEUR", OleDbType.Integer?).Value = 
(ActivityRegistration.id_invitee == 0 ? DBNull.Value : InviteeWebToSGM[ActivityRegistration.id_invitee]); 
+0

數據類型 – 2012-01-30 17:14:52

+0

不使用OleDbType.Integer進行編譯時,參數的數據類型可能需要用空格表示的可以爲空的問號指示? – 2012-01-30 17:24:53

+0

取決於你的C#版本,在C#3.0中有所謂的可空類型,雖然不知道 – 2012-01-30 17:27:45

1

這可能是有關ADO.NET最討厭的事情,但它是它是什麼。是的,您需要使用DBNull.Value,並修復編譯錯誤,將其轉換爲對象。

myAccessCommand.Parameters.Add("@IDACCOMPAGNATEUR", OleDbType.Integer).Value = 
    (ActivityRegistration.id_invitee == 0) 
    ? (object)DBNull.Value 
    : (object)InviteeWebToSGM[ActivityRegistration.id_invitee]; 
+0

可以工作,但是對DBNull.value的第一次投射是無用的,無論如何 – 2012-01-30 17:27:43

相關問題