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 に答える