2016-11-30 68 views
1

我一直在研究後端,即在Sql server 2012中。我已經在表中聲明瞭一個字段作爲Date,即ParawiseDate datetime爲什麼提交日期不是空的,而是1900-01-01?

而且我從C#傳遞一個NULL給它即

sqlcom.Parameters.AddWithValue("@ParawiseDate", NULL); 

問題:

它保存日期爲1900-01-01代替NULL。我試過""並且還保存爲1900-01-01

爲什麼?

+1

什麼是NULL? 'NULL'不是C#關鍵字。 – Dai

+0

也避免使用'AddWithValue',因爲它的類型推斷並不總是準確的。總是指定一個明確的'SqlDbType'值。 – Dai

回答

0

我相信對於DateTime,你可以聲明類型爲「?」 ,否則他們將默認爲1900-01-01

DateTime ? Parameter; 

也可以嘗試傳遞

typeof(System.DateTime) 

,而不是NULL,在第二個參數

+0

我做到了。我已經做了 – Stacky

+0

沒效果,還是一樣 – Stacky

+0

我看,對不起,請輸入typeof(System.DateTime) – user5215286

1

確保它允許ParawiseDate列空值。而不是通過空嘗試DBNull.value

sqlcom.Parameters.AddWithValue("@ParawiseDate", DbNull.Value); 
+0

Lol,同時發佈。那麼,這就是他得到的,Date的默認值。該方法沒有空值,這將是默認值。 – Swift

0

重要的是要知道二進制文件y表示數據是什麼,什麼是允許的。沒有這些,任何程序員都有些盲目。關於這種情況,在MS SQL中默認日期值是1900-01-01。在較舊的CLR中,將AddNthValue與DBNull.Value作爲值相當於將字段設置爲默認值。 我沒有處理4.0 CLR環境,但我可能期望NULL可以被轉移到DBNull?在任何情況下,它不是一個日期值,或者如果NULL可以默認值隱式轉換到Date中? (後者會說MS再次脫離標準,NULL現在必須等於指向任何對象的指針)最有可能是無證的副作用。

public SqlParameter AddWithValue(
    string parameterName, 
    object value 
) 

參數

  • parameterName 類型:System.String 參數的名稱。

  • value 類型:System.Object 的值被添加。使用DBNull.Value而不是null來指示空值。

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue(v=vs.110).aspx

日期和DateTime不能爲空,但在表中的字段可以設置爲允許空值。出於安全原因,通常不會讀取數據會得到默認值。這需要單獨檢查(isDBNull?)

只有SQL中的日期(微軟風格至少)的合法值是0001-01-01到9999-12-31,應該明確給出,否則將使用默認值。

0
SELECT cast(NULLIF(t.[ParawiseDate],'') AS DATE) 
FROM tablename t 
相關問題