C#调用存储过程传递数组参数的问题

问题描述

存储过程在plsql下调试没问题。但是c#执行就报参数或类型不对,麻烦各位帮检查一下。存储过程代码CREATEORREPLACETYPEARR_IDSISTABLEOFNUMBER;CREATEORREPLACEPROCEDUREGET_TESTS(P_IDSINARR_IDS)ASV_IDSARR_IDS:=ARR_IDS();BEGINV_IDS.EXTEND(P_IDS.COUNT);FORiINP_IDS.FIRST..P_IDS.LASTLOOPV_IDS(i):=P_IDS(i);ENDLOOP;END;C#代码conn.Open();OracleCommandcommand=conn.CreateCommand();command.CommandType=CommandType.StoredProcedure;command.CommandText="GET_TESTS";command.Parameters.Add("P_IDS",OracleDbType.Int16,newInt16[]{1,2,3},ParameterDirection.Input);command.Parameters["P_IDS"].CollectionType=OracleCollectionType.PLSQLAssociativeArray;command.ExecuteNonQuery();

解决方案

解决方案二:
你给的参数是批量执行用的,ODP.NET就不支持自定义类型作为参数传递,更何况你定义的那个变量是输入型参数,而不是输出型,只能在PL/SQL里面使用,无法在.NET里面被调用。
解决方案三:
你在oracle定义是NUMBER,你在c#传的却是数组,这当然不行的
解决方案四:
CREATEORREPLACETYPEARR_IDSISTABLEOFNUMBER;你在C#里把一个数组传给NUMBER?
解决方案五:
引用2楼u011130289的回复:

你在oracle定义是NUMBER,你在c#传的却是数组,这当然不行的

引用3楼iloli的回复:

CREATEORREPLACETYPEARR_IDSISTABLEOFNUMBER;你在C#里把一个数组传给NUMBER?

你们两个会Oracle自定义类型吗?再仔细看看,命名是自定义了一个表对象,居然说是NUMBER。CREATEORREPLACETYPEARR_IDSISTABLEOFNUMBER;我都说了是不支持自定义类型了,真不懂怎么还来乱说。
解决方案六:
引用4楼qldsrx的回复:

Quote: 引用2楼u011130289的回复:
你在oracle定义是NUMBER,你在c#传的却是数组,这当然不行的

引用3楼iloli的回复:

CREATEORREPLACETYPEARR_IDSISTABLEOFNUMBER;你在C#里把一个数组传给NUMBER?

你们两个会Oracle自定义类型吗?再仔细看看,命名是自定义了一个表对象,居然说是NUMBER。CREATEORREPLACETYPEARR_IDSISTABLEOFNUMBER;我都说了是不支持自定义类型了,真不懂怎么还来乱说。

http://www.cnblogs.com/KissKnife/archive/2011/04/21/2023472.html
解决方案七:
引用5楼u011130289的回复:

http://www.cnblogs.com/KissKnife/archive/2011/04/21/2023472.html

这么写还不累死人啊,单单可迁移性就消失了,我宁可重新封装一个简单调用的存储过程,那样就可以用我的通用数据库操作类快速编程了。
解决方案八:
OracleDbType我怎么找不到,还是用字符串传入吧
解决方案九:
楼主解决了没?分享下吧,我也遇到这个问题
解决方案十:
存储过程的参数是number,你传个数组过去干嘛...

时间: 2024-07-28 23:03:40

C#调用存储过程传递数组参数的问题的相关文章

oracle11g-C#向Oracle存储过程传递数组参数

问题描述 C#向Oracle存储过程传递数组参数 自定义类型:create or replace TYPE COL AS VARRAY(100) OF varchar2(100); 存储过程:create or replacePROCEDURE CreateModelTable(tableName VARCHAR2colName COLcolType COLsqlflag OUT VARCHAR2) C#传参语句: OracleParameter pColName = new OraclePar

jQuery中通过ajax调用webservice传递数组参数的问题实例详解_jquery

下面通过实例给大家说明比较直观些,更方便大家了解. 本人的项目中通过jquery.ajax调用webservice. 客户端代码如下: $.ajax({ url: "test/xxx.asmx", type: 'POST', dataType: 'xml', timeout: , data: { name: "zhangsan", tags: ["aa", "bb", "cc"] }, error: fun

weblogic连接池-Java调用Oracle存储过程传入数组参数报错

问题描述 Java调用Oracle存储过程传入数组参数报错 weblogic连接池 JNDI提供的链接保存 Oracle数组 报错 oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection 大家好,我在用weblogic连接池 JNDI

sap-java调用SAP的RFC如何传递数组参数

问题描述 java调用SAP的RFC如何传递数组参数 SAP是服务端,使用JCO3的jia包,RFC服务端的函数有一个数组类型的参数. java代码这边用什么形式给它传值.新手请赐教 解决方案 Java中连接SAP进行RFC调用JAVA本地方法调用(2)数组参数传递java调用SAP RFC函数

jquery ajax 向后台传递数组参数示例

在JS中向后台传递数组参数,如果数组中放的是对象类型,传递到后台是显示的只能是对象字符串--[object Object],具体的原因及解决方法如下,有类似问题的朋友可以参考下   需求: 在JS中向后台传递数组参数 分析: JS中的数组是弱类型的可以放任何类型(对象.基本类型),但是如果数组中放的是对象类型,传递到后台是显示的只能是对象字符串--[object Object],原因如下: 在后台接收的时候,只能用request来接收,request.getParameterValues()方法

jquery ajax 向后台传递数组参数示例_AJAX相关

需求: 在JS中向后台传递数组参数 分析: JS中的数组是弱类型的可以放任何类型(对象.基本类型),但是如果数组中放的是对象类型,传递到后台是显示的只能是对象字符串--[object Object],原因如下: 在后台接收的时候,只能用request来接收,request.getParameterValues()方法返回的是一个String[],所以,应该是在前台传输的时候调用了对象的toString()方法,那么如果依然想传递对象怎么办?凉拌! 但是可以使用JSON字符串来实现,在后台把JSO

C#中调用存储过程主要是参数使用问题

存储过程|问题 C#中调用存储过程主要是参数使用问题(输入参数,输出参数,返回值)         //现假设conn是已经定义好的连接,proc为存储过程名         //1.调用无参数无返回的存储过程        //SqlCommand cmd=new SqlCommand(proc,conn);        //cmd.CommandType=CommandType.StoredProcedure;//告知执行存储过程        //conn.Open();       

方法-vb与matlab的混合编程传递数组参数的问题

问题描述 vb与matlab的混合编程传递数组参数的问题 如题,在传递数组参数的时候报错,网上也有一些关于参数的提问,传回的数组参数只有一个数,这里有一篇百度的文章解决的方法已经算是解决了,但是看了一下,它使用的函数在vs2012中没有,如 Call mtInitM Dim tmp1,tmp2 As Long ′创建矩阵句柄 tmp1=mtCreateDoubleMatrix(1,n,0) tmp2=mtCreateDoubleMatrix(1,1,0) 上面的 mtInitM mtCreate

Restful传递数组参数及注解大全_java

RESTful 一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. 需要传递数组参数的情况,如果是一般的form表单,可以直接定义参数类型为List<String>即可(不能定义为数组类型,否则只能得到一个null). 示例代码如下: @POST @Path("/user" ) public Response createUser(@FormPara