我正在尝试构造命名参数但收到错误。
无法从数据库中获取数据 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 :(得分:0)
变量只能是值。您不能将TO_DATE
之类的函数调用作为变量中的文本。
您需要将所有SQL放入查询文本中,并仅将实际变量(如实际时间)提取到绑定变量中。
在这种情况下,为什么不将正确解析的.NET DateTime
作为您的值传递?