如何从.NET调用Oracle存储过程(PL / SQL)?

时间:2012-10-04 05:16:20

标签: c# .net oracle10g oracle-xe

我是Oracle新手。我们公司要求使用Oracle和.Net的项目。所以我试图运行一个演示应用程序。我使用Oracle 10g XE作为DB和VS2010。

我用一个简单的select查询编写了一个程序,该查询被编译(通过googling获得这个程序格式)。

The procedure, which got compiled

我从XE仪表板本身的SQL命令提示符运行存储过程。这就是结果:

enter image description here

现在我用C#编写代码来调用该存储过程:

string sqlCon = "Data Source=xe;Persist Security Info=True;User     ID=sa;Password=password;Unicode=True;Provider=OraOLEDB.Oracle;";
OleDbConnection Con = new OleDbConnection(sqlCon);
OleDbCommand cmd = new OleDbCommand();

DataSet ds = null;
OleDbDataAdapter adapter;

try
{
    Con.Open();
    ////Stored procedure calling. It is already in sample db.
    cmd.CommandText = "TESTPROC";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Connection = Con;

    ds = new DataSet();
    adapter = new OleDbDataAdapter(cmd);
    adapter.Fill(ds, "Users");

    return ds.Tables[0];
 }
 catch (Exception ex)
 {
    throw new Exception(ex.Message);
 }

此代码块没有抛出任何异常。它被执行但我收到的是一个空的数据集。但当我尝试直接使用查询获取数据时,我得到了结果。

那么,我试图访问存储过程的方式是否正确?或者我的存储过程中是否有任何错误?任何人都可以指出错误或最佳方法吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

建议:尝试将“结果”声明为“out”参数:

这是另一个可能有用的链接:

答案 1 :(得分:1)

还有另一个可能有用的链接:

http://www.akadia.com/services/ora_return_result_set.html