C# 使用Enterprise Library 5.0调用以Ref cursor作为输出参数的存储过程

C# 使用Enterprise Library 5.0调用以Ref cursor作为输出参数的存储过程,c#,oracle,enterprise-library,C#,Oracle,Enterprise Library,我对Oracle和Entlib都是新手 我已经编写了一些代码来调用一个运行良好的存储过程,但是当我使用Ref cursor作为输出参数调用存储过程时,会出现一个问题 有谁能帮我写一些示例代码,使用EntLib访问Oracle数据库中的存储过程,EntLib返回一个Ref游标作为输出参数 谢谢 您可以查看源代码中的测试 首先定义一个: 然后创建一个: 注意使用cur_out作为ref游标名称——这是必需的 然后: [TestMethod] [DeploymentItem(@“Testfiles\C

我对Oracle和Entlib都是新手

我已经编写了一些代码来调用一个运行良好的存储过程,但是当我使用Ref cursor作为输出参数调用存储过程时,会出现一个问题

有谁能帮我写一些示例代码,使用EntLib访问Oracle数据库中的存储过程,EntLib返回一个Ref游标作为输出参数


谢谢

您可以查看源代码中的测试

首先定义一个:

然后创建一个:

注意使用cur_out作为ref游标名称——这是必需的

然后:

[TestMethod]
[DeploymentItem(@“Testfiles\Customers.xml”)]
[DeploymentItem(@“Testfiles\Products.xml”)]
使用StoredProc()时会返回公共作废记录
{
Database db=DatabaseFactory.CreateDatabase(“OracleTest”);
字符串spName=“GetCustomerView”;
使用(IDataReader reader=db.ExecuteReader(CommandType.StoredProcess,spName))
{
int columns=dsCustomers.Tables[0].columns.Count;
int i=0;
while(reader.Read())
{
对于(int j=0;j
测试使用的是


如果您使用的是ODP.NET,则需要从使用不推荐使用的System.Data.OracleClient切换到Oracle.DataAccess.Client。您需要使用EntlibContrib。此外,您还可以查看ODP.NET配置示例。

您可以展示一些代码吗?另外:您遇到了什么问题?请解释,张贴准确和完整的错误消息,如果你有一个-什么。。。。。不要只是取笑我们的问题-告诉我们他们是什么!我很抱歉。下次我会确保包括代码和堆栈跟踪。谢谢Randy。这有帮助。
create or replace PACKAGE PKGENTLIB_ARCHITECTURE
IS
TYPE CURENTLIB_ARCHITECTURE IS REF CURSOR;
END PKGENTLIB_ARCHITECTURE;
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;
/
    [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++;
            }
        }
    }