2016-03-22 3 views
1

Я пытаюсь создать именованные параметры, но получаю сообщение об ошибке..NET ORA-01858: был найден нечисловой символ, где ожидалось числовое значение

Не удалось получить данные из базы данных Oracle.DataAccess.Client.OracleException ORA-01858: нечисловое символ был найден где числовая Ожидалось на Oracle.DataAccess.Client.OracleException.HandleErrorHelper. ..

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); 
} 

После запроса строится:

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 

При наличии параметров

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

P2 не должен содержать функцию TO_DATE и ее параметр, а только значение DateTime. Остальная часть должна идти в тексте запроса – Steve

ответ

0

Переменные могут быть только значениями. Вы не можете вызвать вызов функции как TO_DATE как текст в переменной.

Вам нужно поместить все SQL в текст запроса и извлечь только реальные переменные (например, фактическое время) в связанные переменные.

В этом случае, почему бы вам не пройти правильно проанализированный .NET DateTime в качестве значения?