2016-03-22 10 views
1

Ich versuche, benannte Parameter zu erstellen, aber einen Fehler zu erhalten..NET ORA-01858: Ein nicht-numerisches Zeichen wurde gefunden, wo ein numerischer Wert erwartet wurde

kann nicht Daten aus der Datenbank erhält Oracle.DataAccess.Client.OracleException ORA-01858: ein nicht-numerischen Zeichen gefunden wurden, in dem ein numerischen bei Oracle.DataAccess.Client.OracleException.HandleErrorHelper erwartet wurde. ..

private static void AddCriteria(IDbCommand command, string column, object value, string sqlOperator = "=") 
{ 
    var parameter = command.CreateParameter(); 

    if (value is DateTime) 
    { 
     value = FormatSqlDate((DateTime)value); 
    } 

    parameter.ParameterName = DbHelper.GetParameterSql(parameter, "P" + (command.Parameters.Count + 1)); 
    parameter.Value = value; 
    command.Parameters.Add(parameter); 

    command.CommandText += string.Format(" {0} {1} {2} {3}", (command.Parameters.Count > 1 ? "AND" : "WHERE"), column, sqlOperator, parameter.ParameterName); 
} 

folgende Abfrage ist so aufgebaut:

SELECT * 
FROM trade LEFT JOIN 
    findetail 
    ON trade.trade = findetail.trade LEFT JOIN 
    fintransact 
    ON findetail.fintransact = fintransact.fintransact 
WHERE trade.trade = :P1 AND acctdate = :P2 

Während die Parameter

sind
:P1 - 2298056 
:P2 - TO_DATE('2014-12-31T00:00:00', 'YYYY-MM-DD"T"HH24:MI:SS') 
+0

P2 sollte nicht die TO_DATE-Funktion und ihren Parameter enthalten, sondern nur den DateTime-Wert. Der Rest sollte in den Abfragetext gehen – Steve

Antwort

0

Variablen können nur Werte sein. Sie können keinen Funktionsaufruf wie TO_DATE als Text in einer Variablen haben.

Sie müssen alle SQL in den Abfragetext einfügen und nur die realen Variablen (wie die tatsächliche Zeit) in gebundene Variablen extrahieren.

In diesem Fall übergeben Sie eine ordnungsgemäß geparste .NET DateTime als Ihren Wert?

Verwandte Themen