.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')

1 ответ

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

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

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

Другие вопросы по тегам