我有一個查詢,我需要使用Oracle檢查兩個日期之間的日期。每當我運行代碼時,我都會得到一個ORA-01843:不是有效的月份錯誤。但是每當我從sql中刪除兩個參數中的任何一個,它都可以正常工作,但試圖使用兩個日期參數會引發錯誤。我錯過了什麼?第二個日期參數拋出ORA-01843:不是有效的月份錯誤
StringBuilder sql = new StringBuilder();
DateTime yearBegin = new DateTime(Convert.ToInt32(taxYear) + 1, 1, 1);
DateTime yearEnd = new DateTime(Convert.ToInt32(taxYear) + 1, 12, 31);
sql.Append(
"SELECT * FROM TABLE WHERE FIELD = '1099' AND CREATED_DT >= TO_DATE(:createdYearBegin, 'MM/DD/YYYY') AND CREATED_DT <= TO_DATE(:createdYearEnd, 'MM/DD/YYYY') AND SSN = :ssn");
try
{
using (OracleConnection cn = new OracleConnection(ConfigurationManager.AppSettings["cubsConnection"]))
using (OracleCommand cmd = new OracleCommand(sql.ToString(), cn))
{
cmd.Parameters.Add("ssn", ssn);
cmd.Parameters.Add("createdYearBegin", yearBegin.ToShortDateString());
cmd.Parameters.Add("createdYearEnd", yearEnd.ToShortDateString());
cn.Open();
OracleDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
ret = dr.HasRows;
}
}
日期出來正確的調試器看的時候,如果它是一個問題)ToShortDateString的結果(比它也有同樣的問題,是否有一個或兩個日期參數,但是因爲如果我刪除一個,或其他日期參數,並運行它只有一個參數它工作正常。 –
所以你可以看到兩個日期生成的sql是什麼?例如這裏:http://stackoverflow.com/questions/265192/get-the-generated-sql-statement-from-a-sqlcommand-object –
的SQL,則如預期(雖然我不得不添加的日期周圍的單引號:SELECT * FROM TABLE WHERE FIELD ='1099'AND CREATED_DT> = TO_DATE('1/1/2014','MM/DD/YYYY')AND CREATED_DT <= TO_DATE('12/31/2014','MM/DD/YYYY')和SSN =‘ssnNumber’ –