简体   繁体   English

Oracle.ManagedDataAccess.Client.OracleException-ORA-01722:无效的数字

[英]Oracle.ManagedDataAccess.Client.OracleException - ORA-01722: invalid number

I am working in .NET 4.5 C#, oracle 11g environment. 我正在.NET 4.5 C#,oracle 11g环境中工作。

I am experiencing peculiar behaviour, when I call following SQL statement from code by using datacontext 当我使用datacontext从代码中调用以下SQL语句时,我遇到了特殊的行为

I get ORA-01722: invalid number 我收到ORA-01722: invalid number

在此处输入图片说明

StackTrace: 堆栈跟踪:

   at Corp.DataServices.ExecuteQueryHandler.HandleQueryException(Exception exception) in c:\dev\CCTech Main\Corp\Corp.Conveyancing.DataServices\FluentData.cs:line 4022
   at Corp.DataServices.ExecuteQueryHandler.ExecuteQuery(Boolean useReader, Action action) in c:\dev\CCTech Main\Corp\Corp.Conveyancing.DataServices\FluentData.cs:line 3993
   at Corp.DataServices.DbCommand.QueryMany[TEntity,TList](Action`2 customMapper) in c:\dev\CCTech Main\Corp\Corp.Conveyancing.DataServices\FluentData.cs:line 3857
   at Corp.DataServices.DbCommand.QueryMany[TEntity](Action`2 customMapper) in c:\dev\CCTech Main\Corp\Corp.Conveyancing.DataServices\FluentData.cs:line 3882
   at Corp.Dashboard.Controllers.HomeController.GetInstructionsJson(String id) in c:\dev\CCTech Main\Corp\Corp.Conveyancing.Dashboard\Controllers\HomeController.cs:line 65
   at lambda_method(Closure , ControllerBase , Object[] )
   at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.ActionInvocation.InvokeSynchronousActionMethod()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
   at System.Web.Mvc.Async.AsyncResultWrapper.End[TResult](IAsyncResult asyncResult, Object tag)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass48.<InvokeActionMethodFilterAsynchronouslyRecursive>b__41()

Now to the peculiar part. 现在到特殊的部分。
When I execute same exact sql directly from PL/SQL it works just fine 当我直接从PL / SQL执行完全相同的sql时,效果很好
在此处输入图片说明

What is going on? 到底是怎么回事? There aren't any casts in the statement. 语句中没有任何强制转换。 I must be missing something obvious here. 我一定会在这里遗漏一些明显的东西。

You can't pass in a parameter in this way. 您不能以这种方式传递参数。 When you do that, it will render the SQL as something like this: 当您这样做时,它将把SQL渲染成这样:

WHERE productid IN ('1,2,3,4,5')

Which will attempt to cast the value as a single string to a number. 它将尝试将值作为单个字符串转换为数字。 Instead you can either: 相反,您可以:

  • Pass the values as an array using a table valued parameter. 使用表值参数将值作为数组传递。 I've not done this before but pretty sure it's possible, for example How to use Array/Table Parameter to Oracle (ODP.NET 10g) via ADO.NET/C#? 我之前没有做过,但是非常确定这是可能的,例如, 如何通过ADO.NET/C#将数组/表参数用于Oracle(ODP.NET 10g)? )
  • Forget using parameters and use string concatenation. 忘记使用参数并使用字符串连接。 Not usually a great idea (SQL injection etc.) but simple to do. 通常这不是一个好主意(SQL注入等),但操作简单。 To validate the input with RegEx (and assuming you don't have any spaces between the numbers) you could use this to match the input (slightly modified from comment by @LIUFA): ^[0-9][\\,0-9]*$ 要使用RegEx验证输入(并假设数字之间没有空格),可以使用它来匹配输入(通过@LIUFA从注释中稍作修改): ^[0-9][\\,0-9]*$

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Oracle.ManagedDataAccess.Client.OracleException:“ORA-01843:无效月份” - Oracle.ManagedDataAccess.Client.OracleException: "ORA-01843: not a valid month" Oracle.ManagedDataAccess.Client.OracleException:&#39;ORA-02180:CREATE TABLESPACE的无效选项&#39; - Oracle.ManagedDataAccess.Client.OracleException: 'ORA-02180: invalid option for CREATE TABLESPACE' ORA-01722:编号#2无效 - ORA-01722: invalid number #2 Oracle.ManagedDataAccess.Client.OracleException: &#39;ORA-01830: 日期格式图片在转换整个输入字符串之前结束&#39; - Oracle.ManagedDataAccess.Client.OracleException: 'ORA-01830: date format picture ends before converting entire input string' ODP.NET:Oracle.ManagedDataAccess.Client.OracleException (0x80004005):.NET 5(核心)应用程序上的 ORA-01841 - ODP.NET: Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-01841 on .NET 5 (Core) application Oracle.ManagedDataAccess.Client.OracleException (0x80004005): 连接请求超时 - Oracle.ManagedDataAccess.Client.OracleException (0x80004005): Connection request timed out C#Oracle试图传递字符串参数-ORA-01722:无效的数字 - C# oracle trying to pass string parameter - ORA-01722: invalid number ORA-01722:C#中INSERT上的无效数字 - Oracle 11g - ORA-01722: invalid number on INSERT in C# - Oracle 11g 为什么我会收到 ORA-01722(无效号码)? - Why am I getting an ORA-01722 (invalid number)? Oracle.DataAccess.Client.OracleException:ORA-00936:缺少表达式 - Oracle.DataAccess.Client.OracleException: ORA-00936: missing expression
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM