我在oracle中設置了一個存儲過程。它接受許多參數。其中有幾個是「日期」類型。通過Oracle中的參數插入日期
在我的應用程序檢查值,如果符合一定的標準,這樣的分配默認值:
private static string FixInputString(string s)
{
return string.IsNullOrEmpty(s) ? "-1" : s;
}
然後,我格式化爲日期爲Oracle
private static string ConvertToOracleDate(string s)
{
var temp = string.IsNullOrEmpty(s) || string.Equals(s, "-1", StringComparison.InvariantCultureIgnoreCase)
? "01-Jan-1900" : Convert.ToDateTime(s).ToString("dd-MMM-yyyy");
return temp;
}
當我運行它,我有這個值的變量:
然後我設置參數爲這樣:
new SpParameterOracle
{
Key = "p_SGND_DT",
Value = ConvertToOracleDate(FixInputString(form.SignedOnDate)),
Direction = ParameterDirection.Input,
Type = OracleDbType.Date
},
這裏是參數的內容,因爲它是當我將其分配給的OracleCommand:
我的存儲過程,處理輸入參數作爲這樣:
decode(TO_CHAR(p_SGND_DT, 'mm/dd/yyyy'), '01/01/1900', null, TO_DATE(p_SGND_DT, 'DD-MON-YYYY')),
我也試過這樣:
decode(TO_CHAR(p_SGND_DT, 'mm/dd/yyyy'), '01/01/1900', null, p_SGND_DT),
在表中的結果值是這樣的:
爲什麼它改變從01-JAN-1901到01-JAN-2001 ???
到目前爲止,我已經嘗試在應用程序和存儲過程中切換格式,結果仍然相同。
任何想法,將不勝感激。
正如其中一個答案所示,轉換是這個問題的罪魁禍首。
而不是處理它,我修改了存儲過程的邏輯以及代碼。 在存儲過程中我進行所有必要的字段可選這樣的:
p_SGND_DT in date default null,
然後我簡單地插入一個值到表中。 在應用程序方面,我修改了代碼以僅發送使用的參數,省略了其餘的參數,這些參數爲空。
感謝您的幫助,並指引我朝着正確的方向前進。非常感激。
你只是試圖從sqlplus中調用存儲過程和看到的結果是什麼? – OldProgrammer
不,但我現在要做... –
格式不好:'dd-MON-yyyy'。更改爲「dd/MM/yyyy」。結果相同:'1/1/2001'。 –