SQL DateTimeをSqlステートメントで使用することについていくつかの質問がありますが、いずれも問題を解決していません。パラメータ化されたSQL文字列で.Net DateTimeを使用する適切な方法
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;
}
をしかし、それは正しく動作しません:
私は、Oracleデータベースを照会するには、次のコードを使用しています。そのようなコードを実行しようとすると: ORA-01847:
DataTable result = QueryByIdAndDate("12345", DateTime.Now, DateTime.Now.AddDays(1));
それは次のエラーを与える月の日が1月の最後の日
間でなければなりません。私はそれが関係していると仮定していますDateTimeのフォーマット方法はわかりますが、これを信頼できる方法で修正する適切な方法はわかりません。
30日以内に30日間それを実行することはありませんか? –
私がDateTime.NowとDateTime.Now.AddDays(1)を使って示した例では失敗しました。 – user12345613
ドライバは名前付きパラメータを確実にサポートしていますか?位置によってそれらを使用しようとすると、 "終了"部分として "id"値を使用することになります。これは壊れる可能性があります。どのドライバーを使用していますか? –