首页 新闻 会员 周边 捐助

ibatis sql语句nvl(x,'?')报错

0
悬赏园豆:100 [已解决问题] 解决于 2013-06-25 10:49

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)

Leon05的主页 Leon05 | 初学一级 | 园豆:25
提问于:2013-06-24 11:52
< >
分享
最佳答案
0

我记得ibatis中,"?"是关键字符啊。

 

A Parameter Map defines an ordered list of values that match up with the "?" placeholders of a standard, parameterized query statement.

我的理解就是:通过参数映射定义的有序参数列表,来匹配“?”号占位符,从而实现参数化查询。

所以,用?的时候,就被当成参数了,所以报那样的错。

解决方案:可以将?号参数化,然后传值进去。

收获园豆:100
幻天芒 | 高人七级 |园豆:37207 | 2013-06-24 12:53

参数不是用#XX#或$xx$传递的吗

Leon05 | 园豆:25 (初学一级) | 2013-06-24 14:09
其他回答(1)
0

你 用的是什么数据库,如果使用的是 MySQL数据库,那么这个函数是不支持的。我知道Oracle支持NVL()函数,但是MySQL不支持。

Wolfe Yu | 园豆:434 (菜鸟二级) | 2013-06-24 12:31

忘了说了是oracle的,不过上面我说了在PL/SQL里执行是正常的

支持(0) 反对(0) Leon05 | 园豆:25 (初学一级) | 2013-06-24 14:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册