我是Oracle和Entlib的新手。
我已经编写了一些代码来调用存储过程,但是当我使用Ref cursor作为输出参数调用存储过程时会出现问题。
有没有人帮我提供一些示例代码来使用EntLib访问Oracle数据库中的存储过程,EntLib返回Ref游标作为输出参数?
感谢。
答案 0 :(得分:0)
您可以查看源代码中的测试。
首先定义cursor:
create or replace PACKAGE PKGENTLIB_ARCHITECTURE
IS
TYPE CURENTLIB_ARCHITECTURE IS REF CURSOR;
END PKGENTLIB_ARCHITECTURE;
然后创建stored procedure:
CREATE OR REPLACE PROCEDURE "GETCUSTOMERSVIEW" ( cur_OUT OUT PKGENTLIB_ARCHITECTURE.CURENTLIB_ARCHITECTURE)
AS
BEGIN
OPEN cur_OUT FOR
SELECT *
FROM Customers WHERE CustomerId in ('BLAUS','BLONP','BOLID')
ORDER BY CustomerID;
END;
/
注意使用cur_out作为引用游标名称 - 这是必需的。
然后是c# code:
[TestMethod]
[DeploymentItem(@"Testfiles\Customers.xml")]
[DeploymentItem(@"Testfiles\Products.xml")]
public void RecordsAreReturnedWhenUsingStoredProc()
{
Database db = DatabaseFactory.CreateDatabase("OracleTest");
string spName = "GetCustomersView";
using (IDataReader reader = db.ExecuteReader(CommandType.StoredProcedure, spName))
{
int columns = dsCustomers.Tables[0].Columns.Count;
int i = 0;
while (reader.Read())
{
for (int j = 0; j < columns; j++)
{
Assert.AreEqual(dsCustomers.Tables[0].Rows[i][j].ToString().Trim(), reader[j].ToString().Trim());
}
i++;
}
}
}
如果您使用的是ODP.NET,那么您可能希望从使用已弃用的System.Data.OracleClient切换到Oracle.DataAccess.Client。您需要使用EntlibContrib Oracle ODP.NET Data Provider。此外,您可以查看EntLibContrib Quickstart示例ODP.NET配置。