给我一个oracle的存储过程,输出结果为一个datatable,并演示c#如何调用它
时间: 2024-09-09 16:09:44 浏览: 47
Oracle存储过程可以创建一个输出结果为DataTable的结构。首先,你需要在Oracle数据库中创建一个存储过程,然后在C#中通过Oracle的连接和命令对象调用该存储过程,并获取返回的DataTable。
以下是一个Oracle存储过程的示例,该过程返回一个简单的DataTable:
```sql
CREATE OR REPLACE PROCEDURE GetEmployeeTable(
o_result OUT SYS_REFCURSOR
) AS
BEGIN
OPEN o_result FOR
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL
FROM EMPLOYEES;
END GetEmployeeTable;
/
```
在C#中调用这个存储过程,你可以使用Oracle的ODP.NET Managed驱动程序。以下是C#代码示例:
```csharp
using System;
using Oracle.DataAccess.Client; // 使用ODP.NET Managed驱动程序
using System.Data;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
string constr = "User Id=your_username;Password=your_password;Data Source=your_data_source;";
using (OracleConnection conn = new OracleConnection(constr))
{
OracleCommand cmd = new OracleCommand("GetEmployeeTable", conn);
cmd.CommandType = CommandType.StoredProcedure;
// 添加输出参数,类型为 REF CURSOR
OracleParameter outputParameter = new OracleParameter();
outputParameter.OracleDbType = OracleDbType.RefCursor;
outputParameter.Direction = ParameterDirection.Output;
cmd.Parameters.Add(outputParameter);
try
{
conn.Open();
// 执行存储过程
cmd.ExecuteNonQuery();
// 获取输出的 REF CURSOR
OracleDataReader reader = (OracleDataReader)cmd.Parameters[0].Value;
// 创建 DataTable 并使用 DataReader 填充数据
DataTable dataTable = new DataTable();
dataTable.Load(reader);
// 输出 DataTable 内容
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine(row["EMPLOYEE_ID"].ToString() + ", " +
row["FIRST_NAME"].ToString() + ", " +
row["LAST_NAME"].ToString() + ", " +
row["EMAIL"].ToString());
}
reader.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
conn.Close();
}
}
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
}
```
请确保你已经安装了Oracle的ODP.NET Managed驱动程序,并且在连接字符串中替换了正确的用户名、密码和数据源。
阅读全文