[英]How to set Sql DateTime to null from LINQ
我有兩種情況需要將Sql中的DateTime字段設置為null。 我使用C#和LINQ to SQL Classes。 我讀了很多關於stackoverflow的問題,這些問題就像我的問題一樣,但我還是把它給了我一點不同。
當我們插入新客戶時。
對應代碼:
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溢出異常。
那么如何傳遞null值
LINQ數據類中DOB成員的屬性
他們中的許多人建議將自動生成值設置為true,而不是插入任何值。 沒錯,它適用於插入案例。
但現在假設已經存在一個客戶條目,其中某個日期時間值設置為DOB字段。 現在用戶想要清除這個值(刪除生日),然后在這種情況下我必須使用UpdateOn傳遞一個空值來清除相應客戶行中的日期時間。
非常感謝你提前:)
你應該可以使用:
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值,即公元0001年1月1日。 您可以將其更改為:
DateTime? nullDateTime = null;
customer.DOB = dtp_dob.Checked
? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd"))
: nullDateTime;
請試試
if(dtp_dob.Checked )
{
customer.DOB = DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd"));
}
else
{
cstomer.DOB =null;
}
因為DOB可以為空,所以這段代碼會給你你想要的東西。 BTW我找不到像nullDateTime.Value這樣的東西
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.