2011-03-03 51 views
8

我有一個存儲過程,但我有傳遞NULL存儲過程傳遞一個空的DateTime字段中存儲過程

領域麻煩使用我公司供應的參數,更新數據庫我需要NULL是一個DateTime字段

DB.Parameters.AddWithValue("@date", NULL) 

這給我的錯誤

'NULL' 未聲明。 '空'常數不再被支持;使用「System.DBNull」,而不是

所以,我想

DB.Parameters.AddWithValue("@date", DBNull.Value.ToString()) 

但是這將產生值1900-01-01 00:00:00.000在列,因爲它是傳遞一個""到外地

我也試過

DB.Parameters.AddWithValue("@date", DBNull.Value) 

但它產生這個錯誤

類型'System.DBNull'的值不能轉換爲'String'。

有沒有人有任何想法?

+0

如果完全省略參數會發生什麼? – 2011-03-03 14:33:03

+1

@米克,那也失敗了。我想看看他的sp期望的是什麼 – hunter 2011-03-03 14:35:57

+1

小心使用'.AddWithValue'調用 - 在這種情況下.NET如何知道您的參數應該是什麼**類型**如果您傳入'DBNull.Value '?見盧克的答案 - **具體**,你會爲自己節省很多的傷心! (並且真的很難找到錯誤!) – 2011-03-03 15:29:03

回答

12

嘗試這樣的事情,使用Add而不是AddWithValue

DB.Parameters.Add("@date", SqlDbType.DateTime).Value = DBNull.Value; 
+0

+1正確 - ADO.NET應該如何判斷**類型**如果您傳入'DBNull.Value',您的參數將會變爲?清楚明確! – 2011-03-03 15:27:44

2

試試這個

如果您使用的類和它的屬性和這些屬性值作爲參數,那麼你就可以做到這一點

chnage物業的

public DateTime? myDateTime = null;// Here ? is used to make the property nullable. 
簽名

另外,如果您的日期列的類型爲varchar,則將其更正爲Date(Sql2008)/ DateTime(2005)。

//改變參數,這

@SomeDate datetime = null (as suggested by chris) 

讓現場接受空,然後傳遞價值

DB.Parameters.Add("@date", DBNull.Value) 
+0

不會改變任何東西 - 問題是使用'AddWithValue'和'DBNull.Value',ADO.NET運行時不知道你想要的是什麼類型..... – 2011-03-03 15:29:50

12

或者您可以添加參數這樣的,這使得它數據庫中的空值如果變量爲空:

DB.Parameters.AddWithValue("@date", myDateTime ?? (object)DBNull.Value); 

您需要將其設置爲Amit提到的可空類型。

更多細節及可用的背景在http://evonet.com.au/overview-of-c-nullable-types/

0

這是一個例子。它適用於我

if(obj.myDate == DateTime.MinValue) 
{ 
    aCommand.Parameters.Add("dateParameter", SqlDbType.Date).Value = DBNull.Value; 
} 
else 
{ 
    aCommand.Parameters.Add("dateParameter", SqlDbType.Date).Value = obj.myDate ; 
} 
相關問題