2016-03-22 41 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作爲您的值?

相關問題