有幾個關於在Sql語句中使用.Net DateTime的問題,但是他們都沒有解決我的問題。在參數化SQL字符串中使用.Net DateTime的正確方法
我用下面的代碼來查詢Oracle數據庫:
private DataTable QueryByIdAndDate(string id, DateTime fdate, DateTime tdate) {
string query = "SELECT * FROM table WHERE ID = :id AND DATE_TIME BETWEEN :from AND :to"
DbCommand cmd = db.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = query;
DbParameter fromDate = CreateDateParameter(cmd, fdate);
fromDate.ParameterName = "from";
DbParameter toDate = CreateDateParameter(cmd, tdate);
toDate.ParameterName = "to";
DbParameter idParam = CreateStringParameter(cmd, id);
idParam.ParameterName = "id";
cmd.Parameters.AddRange(new DbParameter[] { fromDate, toDate, idParam });
return db.ExecuteQuery(cmd);
}
private DbParameter CreateDateParameter(DbCommand cmd, DateTime date) {
DbParameter param = cmd.CreateParameter();
param.DbType = DbType.DateTime;
param.Direction = ParameterDirection.Input;
param.Value = date;
return param;
}
但它不能正常工作。當就試圖像這樣的代碼:
DataTable result = QueryByIdAndDate("12345", DateTime.Now, DateTime.Now.AddDays(1));
它提供了以下錯誤: ORA-01847:月日必須在1月的最後一天之間
我假設它做與DateTime格式化的方式,但我不知道以可靠的方式解決這個問題的正確方法。
你會不會恰好在一個月的30號裏跑步,只有30天? – 2012-04-24 20:09:24
沒有。它使用DateTime.Now和DateTime.Now.AddDays(1)顯示的示例失敗。 – user12345613 2012-04-24 20:10:11
您的驅動程序是否絕對支持命名參數?如果它試圖按位置使用它們,它最終會使用「id」值作爲「to」部分,這可能會被破壞。你在使用哪個驅動程序? – 2012-04-24 20:11:07