C 讀取Oracle儲存過程記錄集錯誤解決辦法

2021-03-31 08:56:57 字數 2619 閱讀 8815

在c#中使用游標返回oracle的儲存過程記錄集時

如果程式中引數的名字和oracle儲存過程輸出引數的名字不一樣,則會出現一下錯誤

未處理的「system.data.oracleclient.oracleexception」型別的異常出現在 system.data.dll 中。

其他資訊: ora-06550: line 1, column 7:

pls-00306: wrong number or types of arguments in call to 'alltest1'

ora-06550: line 1, column 7:

pl/sql: statement ignored

解決辦法如下:

修改儲存過程中輸出引數的名稱,使其和程式中生成的輸入引數名稱保持一致,

也可以修改程式中輸出引數的名稱,使其和oracle儲存過程中的名稱保持一致。

另外:關閉游標不用手動進行關閉,open mycursor for select * from table ;以後,oracle會自動關閉游標。

以下為程式**:

1.資料報**

create or replace package demo

istype curdemo is ref cursor;

procedure getdemo

(usercurdemo out demo.curdemo);

end demo;

create or replace package body demo

asprocedure getdemo

(usercurdemo out demo.curdemo)

isbegin

open usercurdemo for select ssn,fname,lname from person;

end getdemo;

end demo;

2.程式**

oracleconnection ora** = new oracleconnection("user id=blog;password=myblog;data source=db_192.168.0.106");

oracle***mand oracmd = new oracle***mand();   

oracmd.***mandtext = "demo.getdemo";

oracmd.***mandtype = ***mandtype.storedprocedure;

oracmd.parameters.clear();

oracmd.connection = ora**;

oracleparameter cursor = new oracleparameter("pgettest11",oracletype.cursor,260,parameterdirection.output,true,0,0,"",datarowversion.default,convert.dbnull);

oracmd.parameters.add(cursor);

oracledataadapter orada = new oracledataadapter();

orada.select***mand = oracmd;

ora**.open();

dataset ds = new dataset();

orada.fill(ds,"test1");

datagrid1.datasource = ds.tables["test1"].defaultview;

ora**.close();

此處會報錯

修改為以下**後,錯誤消失

oracleconnection ora** = new oracleconnection("user id=blog;password=myblog;data source=db_192.168.0.106");

oracle***mand oracmd = new oracle***mand();

oracmd.***mandtext = "demo.getdemo";

oracmd.***mandtype = ***mandtype.storedprocedure;

oracmd.parameters.clear();

oracmd.connection = ora**;

oracleparameter cursor = new oracleparameter("usercurdemo",oracletype.cursor,260,parameterdirection.output,true,0,0,"",datarowversion.default,convert.dbnull);

oracmd.parameters.add(cursor);

oracledataadapter orada = new oracledataadapter();

orada.select***mand = oracmd;

ora**.open();

dataset ds = new dataset();

orada.fill(ds,"test1");

datagrid1.datasource = ds.tables["test1"].defaultview;

ora**.close();

oracle儲存過程輸出多行記錄

今天oracle上機實驗。作業題目要求 顯示所有學生學號和姓名。type,rowtype都只能讀出一行記錄。但是游標可以讀多行。cursor select into v record from s declare cursor l c is select sno,sname from s begin...

使用C 操作Oracle儲存過程記錄集

命名空間 system.data.oracleclient c 連線oracle字串 string constr user id 使用者名稱 password 密碼 data source 服務名 oracle返回記錄集儲存過程 1.定義游標 type tablescursor is ref cur...

C 呼叫oracle儲存過程

建立oracle過程儲存 create or replace procedure proce test paramin in varchar2,paramout out varchar2,paraminout in out varchar2 asvarparam varchar2 28 begin ...