2010-04-08 75 views
1

我正在將項目轉換爲使用ObjectDataSources而不是SqlDataSources。我正在使用用戶輸入日期的文本框。當這些被SqlDataSource留空時,發送到存儲過程的值爲null,這樣我就可以從沒有指定日期的查詢中獲得正確的結果。ObjectDataSource將空字符串轉換爲01/01/01

使用ObjectDataSource,日期文本框的空白輸入被轉換爲01/01/0001 00:00:00,這是查詢不可接受的。

當文本框留空時,任何人都知道如何在ObjectDataSource上接收此參數的空值?

thanksHi

+0

你在班上使用了一個可爲空的DateTime嗎? – 2010-04-09 12:35:56

回答

0

我發現了一個辦法做到這一點,通過檢查MINDATE內聯和替換爲null。感覺有點哈克,但它工作正常,我找不到任何其他建議。如果你有更好的主意,請告訴我!

cmd.Parameters.AddWithValue("@ABCId", objectType == "AbcId" ? objectId.ToString() : null); 
      cmd.Parameters.AddWithValue("@CounterpartyId", objectType == "CounterpartyId" ? objectId.ToString() : null); 
      cmd.Parameters.AddWithValue("@FromDate", fromDate == DateTime.MinValue ? null : fromDate.ToLongDateString()); 
      cmd.Parameters.AddWithValue("@ToDate", toDate == DateTime.MinValue ? null : toDate.ToLongDateString()); 
      cmd.Parameters.AddWithValue("@RelationshipId", objectType == "RelId" ? objectId.ToString() : null); 
      cmd.Parameters.AddWithValue("@ShowNonTradePayments", showNonTradePayments); 
      cmd.Parameters.AddWithValue("@ShowTradePayments", showTradePayments); 
+0

你說「當這些被留空......發送到存儲過程的值爲空......」,你確定它沒有作爲DateTime.MinValue發送,因爲你必須在你的答案中專門處理 - 碼?如果toDate不可爲空,則它永遠不能爲空。 – 2010-04-09 12:37:15

+0

我的意思是最初,當這是使用SqlDataSource完成時,然後日期文本框,留空時,將導致null值到達存儲過程。然後,我的存儲過程將包括所有結果,不管日期。當我試圖對ODS執行相同操作時,MinDate值正被傳遞給存儲過程,導致錯誤或不正確的結果。所以我必須找到一種方法來將傳入的MinDate值轉換爲空值,以便存儲的proc將正確行爲 - 這就是上面的代碼所做的。 – willemaster 2010-04-09 13:40:07

0

我最終將「01/01/1900」作爲我的「null」。不是書的解決方案,但實際上它並沒有打擾我們。我們有自己的轉換課程,它透明地捕獲這些哨點值,所以我們可以在大多數情況下將這個問題遺忘。 在HQL/SQL查詢中,我們只是要求大於01/01/1901(非空)或小於01/01/1901(空)的值。

+0

是的,我可以看到,這將工作,但我很驚訝MS還沒有提供更優雅的解決方案,特別是當這種解決方法不需要與SqlDataSource。 – willemaster 2010-04-09 13:43:04