在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 ...