.NET ORA-01858:找到了一个非数字字符,其中包含数字

时间:2016-03-22 11:02:36

标签: sql .net oracle dbcommand

我正在尝试构造命名参数但收到错误。

  

无法从数据库中获取数据   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 个答案:

答案 0 :(得分:0)

变量只能是值。您不能将TO_DATE之类的函数调用作为变量中的文本。

您需要将所有SQL放入查询文本中,并仅将实际变量(如实际时间)提取到绑定变量中。

在这种情况下,为什么不将正确解析的.NET DateTime作为您的值传递?