Es gibt einige Fragen über die Verwendung von. Net DateTime in Sql-Anweisungen, aber keiner von ihnen löste mein Problem.Proper Weg zu verwenden. Net DateTime in parametrisierten SQL-Zeichenfolge
Ich verwende den folgenden Code, um eine Oracle-Datenbank abzufragen:
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;
}
Aber es funktioniert nicht richtig. Wenn der Code versucht, so wie aus:
DataTable result = QueryByIdAndDate("12345", DateTime.Now, DateTime.Now.AddDays(1));
Es gibt die folgenden Fehler: ORA-01847: Tag des Monats zwischen 1 und letzten Tag des Monats muss
ich davon aus bin, es zu tun hat mit der Art, wie die DateTime formatiert ist, aber ich weiß nicht, wie man das auf zuverlässige Weise beheben kann.
Sie würden es nicht am 30. eines Monats mit nur 30 Tagen laufen würden Sie? –
Nein. Es ist fehlgeschlagen mit dem Beispiel, das ich mit DateTime.Now und DateTime.Now.AddDays (1) gezeigt habe; – user12345613
Unterstützt Ihr Treiber definitiv benannte Parameter? Wenn es versucht wird, sie nach Position zu verwenden, wird am Ende der "id" -Wert als "to" -Teil verwendet, der gebrochen werden könnte. Welchen Treiber verwendest du? –