Правильный способ использования.Net DateTime в параметризованной строке SQL

Есть несколько вопросов об использовании.Net DateTime в операторах Sql, но ни один из них не решил мою проблему.

Я использую следующий код для запросов к базе данных 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 и последним днем ​​месяца

Я предполагаю, что это связано с форматированием даты и времени, но я не знаю, как это исправить надежным способом.

6
задан user12345613 24 April 2012 в 20:00
поделиться