1

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

无法从数据库 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')
4

1 回答 1

0

变量只能是值。您不能像TO_DATE变量中的文本那样进行函数调用。

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

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

于 2016-03-22T11:08:03.257 回答