色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

Oracle數(shù)據(jù)庫返回cursor問題的解決方法

瀏覽:143日期:2023-11-22 19:31:25

這篇論壇文章(賽迪網(wǎng)技術(shù)社區(qū))著重介紹了Oracle數(shù)據(jù)庫返回cursor問題的解決方法,詳細(xì)內(nèi)容請參考下文:

昨天使用 Data Block 操作 oracle 返回 cursor 。期間產(chǎn)生了一點(diǎn)問題,很是郁悶,找了一下午也沒有解決。早上睡不著,起來繼續(xù)找。結(jié)果找到了解決的方法。其實(shí)也是怪自己沒有很好的看文檔。在此記錄一下。以使別的同志再出現(xiàn)我的問題的時候,很容易的找到解決的方法。

問題是這樣的:

我在oracle里面有這樣一個過程

PROCEDURE ListAllStatic_Users (cur_Static_User OUT T_CURSOR)

IS

BEGIN

OPEN cur_Static_User FOR

Select * FROM Static_User ;

END ListAllStatic_Users;

我在程序里面如下調(diào)用:

Database db = DatabaseFactory.CreateDatabase('oraserver');

string sqlCommand = 'Static_UserPackage.ListAllStatic_Users';

DBCommandWrapper dbCommandWrapper =db.GetStoredProcCommandWrapper(sqlCommand);

DataSet dsCustomers = db.ExecuteDataSet(dbCommandWrapper);

DataGrid1.DataSource=dsCstomers;

DataGrid1.DataBind();

結(jié)果出現(xiàn)如下問題:

ORA-06550: 第 1 行, 第 7 列: PLS-00306: 調(diào)用 'LISTALLSTATIC_USERS' 時參數(shù)個數(shù)或類型錯誤 orA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored

說明: 執(zhí)行當(dāng)前 Web 請求期間,出現(xiàn)未處理的異常。請檢查堆棧跟蹤信息,以了解有關(guān)該錯誤以及代碼中導(dǎo)致錯誤的出處的詳細(xì)信息。

異常詳細(xì)信息: System.Data.OracleClient.OracleException: orA-06550: 第 1 行, 第 7 列: PLS-00306: 調(diào)用 'LISTALLSTATIC_USERS' 時參數(shù)個數(shù)或類型錯誤 orA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored

源錯誤:

行 44:

行 45: DataSet dsCustomers = db.ExecuteDataSet(dbCommandWrapper);行 46: DataGrid1.DataSource=dsCustomers;

行 47: DataGrid1.DataBind();

我以為是我的參數(shù)沒有弄對,于是就加了一句:

dbCommandWrapper.AddOutParameter('cur_Static_User',DbType.Object,500);

結(jié)果還是一樣的。后來也試驗(yàn)了

OracleCommandWrapper.AddParameter(string,DbType,int,ParameterDirection,bool,byte,byte,string,DataRowVersion,object);

這個方法來添加,也是不行。

后來就上網(wǎng)找了很長時間也沒有什么進(jìn)展。今天早上起來,還是一籌莫展,偶爾的打開Enterprise Library安裝目錄的Enterprise Library Release Notes.rtf文件,發(fā)現(xiàn)里面有這么一段

2.4 Data Access Application Block: Default oracle cursor cur_OUT

The managed provider for oracle requires you to explicitly bind your reference cursor in your parameter collection. This means you must explicitly create an output parameter for the cursor in your application code. However, that code will not be portable with database systems that do not require a parameter for the cursor. The oracleDatabase allows you to create commands without specifying a cursor. It will create a cursor, named cur_OUT, for commands that execute a stored procedure and do not include an output parameter for the cursor. This means that you can name your reference cursor as 'cur_OUT' and the Data Access Application Block will bind it for you; you do not need to explicitly create an output parameter for the cursor. If your stored procedures use a cursor with a name other than 'cur_OUT,' you must explicitly add a parameter for each cursor to the command. Similarly, if your stored procedure contains multiple cursors, you must explicitly add each cursor parameter to the command.

這下我就明白了。在我的oracle函數(shù)中,我的名字 cur_Static_User 和默認(rèn)的名字cur_OUT不匹配。

于是我就改了我的存儲過程的參數(shù)名稱,cur_Static_User改為 cur_OUT。

問題就解決了。

經(jīng)過試驗(yàn),也可以用如下方法用自己的參數(shù)名,而不用默認(rèn)的參數(shù)名。

也可以,在一個PROCEDURE中返回多個 CURSOR

我的存儲過程:

Procedure STATIC_USER_SelectAll

( cur_OUT_f OUT T_OUT, cur_OUT_g OUT T_OUT)

AS

Begin

OPEN cur_OUT_f FOR Select * from STATIC_USER;

OPEN cur_OUT_g FOR Select * from STATIC_ROLE;

End;

代碼如下:

Database db = DatabaseFactory.CreateDatabase('oraserver');

string sqlCommand = 'Static_UserPackage.STATIC_USER_SelectAll';

Microsoft.Practices.EnterpriseLibrary.Data.Oracle.OracleCommandWrapper dbCommandWrapper =(Microsoft.Practices.EnterpriseLibrary.Data.Oracle.OracleCommandWrapper)db.GetStoredProcCommandWrapper(sqlCommand);

dbCommandWrapper.AddParameter('cur_OUT_f', OracleType.Cursor, 0, ParameterDirection.Output, true, 0, 0, String.Empty, DataRowVersion.Default, Convert.DBNull);

dbCommandWrapper.AddParameter('cur_OUT_g', OracleType.Cursor, 0, ParameterDirection.Output, true, 0, 0, String.Empty, DataRowVersion.Default, Convert.DBNull);

DataSet dsCustomers = db.ExecuteDataSet(dbCommandWrapper);

DataGrid1.DataSource=dsCustomers.Tables[0];

DataGrid1.DataBind();

DataGrid2.DataSource=dsCustomers.Tables[1];

DataGrid2.DataBind();

標(biāo)簽: Oracle 數(shù)據(jù)庫
主站蜘蛛池模板: 欧美日本综合一区二区三区 | 午夜欧美成人 | 国产高清一区二区三区 | 国产亚洲欧美日韩国产片 | 2021国产精品系列一区二区 | 美日韩一区二区 | 中文字幕亚洲 综合久久 | 色爽爽爽爽爽爽爽爽 | 女人张开腿让男人捅视频 | a毛片a毛片a视频 | 精品一区二区三区三区 | 老人毛片 | 亚洲第一se情网站 | 美女色黄网站 | 国产精品国产亚洲精品不卡 | 日韩精品一区二区三区中文在线 | 日本精品久久久久久久久免费 | 三级黄色高清视频 | 国产精品国三级国产aⅴ | 国产精品亚洲精品一区二区三区 | 五月桃花网婷婷亚洲综合 | 韩国免费特一级毛片 | 一级做a爱片特黄在线观看 一级做a爱片特黄在线观看免费看 | 特级毛片全部免费播放a一级 | 久久精品国产99久久72 | 亚洲一区二区三区精品国产 | 欧美日韩视频一区二区三区 | 欧美a在线 | 国产三级黄色片 | 久久久精品影院 | 亚洲免费成人在线 | 日本aaaa片毛片免费观看 | 香蕉97碰碰视频免费 | 经典三级久久 | 欧美亚洲网站 | 日本不卡一区视频 | 99免费在线播放99久久免费 | 成人午夜视频在线观看 | 午夜在线伦理福利视频 | 视频二区欧美 | 成年人免费在线视频观看 |