我一直在研究後端,即在Sql server 2012中。我已經在表中聲明瞭一個字段作爲Date,即ParawiseDate datetime。爲什麼提交日期不是空的,而是1900-01-01?
而且我從C#傳遞一個NULL給它即
sqlcom.Parameters.AddWithValue("@ParawiseDate", NULL);
問題:
它保存日期爲1900-01-01代替NULL。我試過""
並且還保存爲1900-01-01。
爲什麼?
我一直在研究後端,即在Sql server 2012中。我已經在表中聲明瞭一個字段作爲Date,即ParawiseDate datetime。爲什麼提交日期不是空的,而是1900-01-01?
而且我從C#傳遞一個NULL給它即
sqlcom.Parameters.AddWithValue("@ParawiseDate", NULL);
問題:
它保存日期爲1900-01-01代替NULL。我試過""
並且還保存爲1900-01-01。
爲什麼?
我相信對於DateTime,你可以聲明類型爲「?」 ,否則他們將默認爲1900-01-01
DateTime ? Parameter;
也可以嘗試傳遞
typeof(System.DateTime)
,而不是NULL,在第二個參數
確保它允許ParawiseDate列空值。而不是通過空嘗試DBNull.value
sqlcom.Parameters.AddWithValue("@ParawiseDate", DbNull.Value);
Lol,同時發佈。那麼,這就是他得到的,Date的默認值。該方法沒有空值,這將是默認值。 – Swift
重要的是要知道二進制文件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來指示空值。
日期和DateTime不能爲空,但在表中的字段可以設置爲允許空值。出於安全原因,通常不會讀取數據會得到默認值。這需要單獨檢查(isDBNull?)
只有SQL中的日期(微軟風格至少)的合法值是0001-01-01到9999-12-31,應該明確給出,否則將使用默認值。
SELECT cast(NULLIF(t.[ParawiseDate],'') AS DATE)
FROM tablename t
什麼是NULL? 'NULL'不是C#關鍵字。 – Dai
也避免使用'AddWithValue',因爲它的類型推斷並不總是準確的。總是指定一個明確的'SqlDbType'值。 – Dai