2011-04-16 27 views
5

我有兩種情況需要將Sql中的DateTime字段設置爲空。我使用C#和LINQ to SQL類。我閱讀了很多關於stackoverflow的問題,這些問題就像我的問題,但我仍然有點不同。如何將LINQ的Sql DateTime設置爲空

當我們插入一個新的客戶。

相應的代碼:

Customer customer = new Customer(); 
customer.CustomerName = txt_name.Text; 
customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : //send null here; 

customer.DOB是System.DateTime的。

我想的是:

1)

customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : SqlDateTime.Null; 

但這不會成功,因爲SQLDATETIME不能轉換爲System.DateTime。

2)

DateTime? nullDateTime = new DateTime(); 
customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : nullDateTime.Value 

在這種情況下,建立成功,但它會拋出一個SQLDATETIME溢出異常。

那麼接下來如何通過在LINQ數據類空值DOB成員屬性

enter image description here

他們中的許多建議設置自動生成的值設置爲true,不插入任何價值。誠然,它適用於插入案例。

但是現在假設已經有一個客戶條目,其中一些日期時間值被設置爲DOB字段。現在用戶想要清除該值(刪除出生日期),那麼在這種情況下,我必須使用UpdateOn傳遞空值來清除相應客戶行中的日期時間字段。

非常感謝你提前:)

+0

它可以爲空,您能不能將它設置爲'null'? – 2011-04-16 08:36:26

+0

如果列可以爲空,則Customer.DOB應該是DateTime?而不是DateTime。 – 2011-04-16 08:48:05

回答

13

什麼,你應該能夠使用:

Customer customer = new Customer(); 
customer.CustomerName = txt_name.Text; 
customer.DOB = dtp_dob.Checked 
        ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) 
        : (DateTime?) null; 

null投給DateTime?。目前的問題是編譯器無法根據操作數計算出條件表達式的類型。

第二次嘗試的問題是您正在創建新的不可爲空的DateTime值,即1月1日0001 AD。您可以將其更改爲:

DateTime? nullDateTime = null; 
customer.DOB = dtp_dob.Checked 
        ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) 
        : nullDateTime; 
+0

高超,工作就像一個魅力:)謝謝.. ..! – Marshal 2011-04-16 10:03:02

0

PLZ嘗試

if(dtp_dob.Checked) 
{ 
    customer.DOB = DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")); 
} 
else 
{ 
    cstomer.DOB =null; 
} 

因爲出生日期爲空這段代碼會給你想要的東西。 BTW,我不能找到像nullDateTime.Value