2012-10-04 32 views
1

我是Oracle的新手。我们公司对使用Oracle和.Net的项目有一个要求。所以我试图运行一个演示应用程序。我正在使用Oracle 10g XE作为数据库和VS2010。如何从.NET调用Oracle存储过程(PL/SQL)?

我用一个简单的select查询编写了一个程序,它被编译了(通过google搜索得到了这个程序格式)。

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); 
} 

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

那么,我试图访问存储过程的方式是否正确?或者我的存储过程中有任何错误?任何人都可以指出错误或最好的方式来做到这一点?

在此先感谢。

回答