用.NET呼叫oracle的儲存過程返回記錄集 (轉)
文章出處:偉網動力()
有何見解,可以來此論壇
轉貼請標明出處,謝謝。
最近做一個專案,為了提高性,客戶要求所有資料庫操作都要放在過程。象一般的操作,返回一個值的,都比較容易實現。而要想返回記錄集就比較麻煩,我在網上搜了一下,這方面的文章並不多。在此總結一下,供大家參考。
有關如何訪問資料庫,在此就不介紹了。相關的資料也很多,有興趣的朋友可以看下文。
使用.NET訪問Oracle資料庫的方法
oracle的儲存過程返回記錄集,關鍵之處是要用遊標。
關於資料庫的遊標(cursor)大家肯定都接觸不少,我們可以透過OPEN,FETCH,CLOSE操作控制遊標進行各種方便的操作,這方面的例子我就不在重複了。我們現在要介紹的是遊標變數(cursor variable)。類似遊標,遊標變數也是指向一個查詢結果集的當前行。不同的是,遊標變數能為任何型別相似(type-compatible)的查詢開啟,而並不是繫結到某一個特定的查詢。透過遊標變數,你可以在資料庫的資料提取中獲得更多的方便。
首先是建立表。
CREATE TABLE LIHUAN.BILL_POINTS
(
POINTS_ID NUMBER(10,0) NOT NULL,
CUSTOMER_ID NUMBER(10,0) NOT NULL,
BILL_POINT_NO NUMBER(2,0) DEFAULT 1 NOT NULL,
CONSTRAINT PK_BILL_POINTS PRIMARY KEY (POINTS_ID)
)
/
其次,建PACKAGE
CREATE OR REPLACE PACKAGE LIHUAN.YY_PKG_BILL_POINT_NO/*取得的所有計費電序號*/
IS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE BILL_POINT_NO(P_CUSTOMER_ID BILL_POINTS.CUSTOMER_ID%TYPE,
Re_CURSOR OUT T_CURSOR);
END;
/
再次,建PACKAGE BODY
CREATE OR REPLACE PACKAGE BODY LIHUAN.YY_PKG_BILL_POINT_NO/*取得使用者的所有計費電序號*/
IS
PROCEDURE BILL_POINT_NO(P_CUSTOMER_ID BILL_POINTS.CUSTOMER_ID%TYPE,
Re_CURSOR OUT T_CURSOR)
IS
V_CURSOR T_CURSOR;
BEGIN
OPEN V_CURSOR FOR
Bill_Point_No from BILL_POINTS where CUSTOMER_ID =P_CUSTOMER_ID;
Re_CURSOR := V_CURSOR;
END;
END;
/
最後,在.NET中。
public DataSet Bill_Point_No(string CUSTOMER_ID)//ok
{
DataSet dataset = new DataSet();
Hashtable HT=new Hashtable();
HT.Add("P_CUSTOMER_ID",CUSTOMER_ID);
if(RunProcedure("Re_CURSOR",OracleType.Cursor,ref dataset,HT,bmsOracleUser+".YY_PKG_BILL_POINT_NO.BILL_POINT_NO",bmsOracleConnectionString))
{
;
}
else
{
dataset=null;
}
return dataset;
}
public bool RunProcedure(string ReturnParameter,OracleType ParamType,ref DataSet Dataset,Hashtable HT ,string ProcedureName,string OracleConnection)
{
System.Data.OracleClient.OracleConnection dnnection = new System.Data.OracleClient.OracleConnection(OracleConnection);
System.Data.OracleClient.OracleCommand dacommand = new System.Data.OracleClient.OracleCommand(ProcedureName,dsconnection);
dsconnection.Open();
dacommand.CommandType=CommandType.StoredProcedure;
IDictionaryEnumerator Enumerator;
Enumerator = HT.GetEnumerator();
Value=null;
OracleParameter OracleParam;
OracleParam = dacommand.Parameters.Add(new OracleParameter(ReturnParameter,ParamType));
OracleParam.Direction = ParameterDirection.Output;
while(Enumerator.MoveNext())
{
Value = Enumerator.Value;
OracleParam=dacommand.Parameters.Add(new OracleParameter(Enumerator.Key.ToString(), Value));
}
OracleDataAdapter ODAdapter=new OracleDataAdapter(dacommand);
try
{
ODAdapter.Fill(Dataset);
return true;
}
catch(System.Exception e)
{
e.ToString();
return false;
}
finally
{
HT.Clear();
dacommand.Parameters.Clear();
dsconnection.Close();
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-963030/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 儲存過程返回結果集|轉|Oracle儲存過程
- Oracle 儲存過程返回結果集 (轉)Oracle儲存過程
- 用java呼叫oracle儲存過程JavaOracle儲存過程
- 儲存過程返回資料集儲存過程
- JAVA + Oracle儲存過程返回查詢結果集JavaOracle儲存過程
- Sqlsugar呼叫Oracle的儲存過程SqlSugarOracle儲存過程
- java 呼叫oracle 儲存過程JavaOracle儲存過程
- 用java呼叫oracle儲存過程總結JavaOracle儲存過程
- C#呼叫 oracle儲存過程C#Oracle儲存過程
- C#呼叫Oracle儲存過程C#Oracle儲存過程
- java中呼叫ORACLE儲存過程JavaOracle儲存過程
- java使用mybatis 呼叫儲存過程返回一個遊標結果集JavaMyBatis儲存過程
- 從sybase的儲存過程轉向oracle的儲存過程儲存過程Oracle
- 用PHP呼叫MySQL儲存過程PHPMySql儲存過程
- 呼叫儲存過程儲存過程
- Java呼叫Oracle儲存過程的問題JavaOracle儲存過程
- oracle goldengate 呼叫儲存過程案例OracleGo儲存過程
- Jsp中呼叫Oracle儲存過程JSOracle儲存過程
- Oracle 儲存過程分頁 + Sqlsugar呼叫Oracle儲存過程SqlSugar
- c#呼叫儲存過程小記C#儲存過程
- 使用ADO呼叫儲存過程 (轉)儲存過程
- MyBatis 呼叫Oracle儲存過程,傳參、返回遊標的值獲取--示例MyBatisOracle儲存過程
- Hibernate呼叫oracle儲存過程的問題Oracle儲存過程
- oracle父儲存過程呼叫子儲存過程procedure與輸出引數Oracle儲存過程
- Winform呼叫儲存過程ORM儲存過程
- perl呼叫儲存過程儲存過程
- jdbc呼叫儲存過程JDBC儲存過程
- 在儲存過程A中呼叫儲存過程B的結果儲存過程
- mybatis儲存過程返回listMyBatis儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- mysql返回一個結果集的儲存過程小例子MySql儲存過程
- vb呼叫儲存過程的方法儲存過程
- 儲存過程呼叫其他模式的儲存過程需要注意的地方儲存過程模式
- oracle的儲存過程Oracle儲存過程
- mysql如何呼叫儲存過程MySql儲存過程
- linux呼叫儲存過程Linux儲存過程
- PB中呼叫儲存過程儲存過程
- php呼叫mssql儲存過程PHPSQL儲存過程