ibatis.net XML里的sql语句nvl(x,'?')报错,在PL/SQL里执行正常,用其他符号替换'?'也正常。
后台错误信息为:指定的参数已超出有效值的范围。
参数名: index| 在 IBatisNet.DataMapper.Configuration.ParameterMapping.ParameterPropertyCollection.get_Item(Int32 index)
在 IBatisNet.DataMapper.Configuration.Statements.PreparedStatementFactory.EvaluateParameterMap()
在 IBatisNet.DataMapper.Configuration.Statements.PreparedStatementFactory.Prepare()
在 IBatisNet.DataMapper.Configuration.Sql.Dynamic.DynamicSql.BuildPreparedStatement(ISqlMapSession session, RequestScope request, String sqlStatement)
在 IBatisNet.DataMapper.Configuration.Sql.Dynamic.DynamicSql.GetRequestScope(IMappedStatement mappedStatement, Object parameterObject, ISqlMapSession session)
在 IBatisNet.DataMapper.MappedStatements.MappedStatement.ExecuteQueryForList[T](ISqlMapSession session, Object parameterObject)
在 IBatisNet.DataMapper.SqlMapper.QueryForList[T](String statementName, Object parameterObject)
在 HopeTargle.Core.DataAccess.SqlAdaper.ExecuteQueryForList[T](String statementName, Object parameterObject)
在 HopeTargle.Core.Model.BaseModelBuilder.ListStringObjectDictionary(String statementName, Object parameterObject)
在 HopeTargle.Core.Model.BaseModelBuilder.HopeTargle.Core.Model.IModelBuilder.ListStringObjectDictionary(String statementName, Object parameterObject)
在 HopeTargle.HR.Controllers.Wages_RepController.GetBankTxt() 位置 F:\Tute_Work_Folder\Hopetargle\@branch\dev\HopeTargle.HR\Wages\Wages_RepController.cs:行号 1368
在 lambda_method(ExecutionScope , ControllerBase , Object[] )
在 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
在 System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.b__7()
在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
在 System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<>c__DisplayClassc.b__9()
在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
在 System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<>c__DisplayClassc.b__9()
在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
在 System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<>c__DisplayClassc.b__9()
在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
在 System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<>c__DisplayClassc.b__9()
在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
在 System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<>c__DisplayClassc.b__9()
在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
在 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
我记得ibatis中,"?"是关键字符啊。
A Parameter Map defines an ordered list of values that match up with the "?" placeholders of a standard, parameterized query statement.
我的理解就是:通过参数映射定义的有序参数列表,来匹配“?”号占位符,从而实现参数化查询。
所以,用?的时候,就被当成参数了,所以报那样的错。
解决方案:可以将?号参数化,然后传值进去。
参数不是用#XX#或$xx$传递的吗
你 用的是什么数据库,如果使用的是 MySQL数据库,那么这个函数是不支持的。我知道Oracle支持NVL()函数,但是MySQL不支持。
忘了说了是oracle的,不过上面我说了在PL/SQL里执行是正常的