关于c#调用oracle存储过程返回数据集的写法

本文介绍了一个用于生成诊所就诊率报告的存储过程。该过程接收开始日期、结束日期等参数,并返回患者就诊次数的统计数据。此外,还展示了如何通过.NET代码调用此存储过程并显示结果。

CREATE OR REPLACE package body REPORT.Clinic_Rate
as
PROCEDURE Clinic_Master
(
    Start_Date date,
 End_Date date,
    I number,
    T_Rate  OUT T_CURSOR
)
IS
BEGIN
    OPEN T_Rate FOR
    select  COUNTS,count(*) as counts_number  from
    (
        SELECT PATIENT_ID,COUNT(PATIENT_ID) AS COUNTs FROM CLINIC_MASTER  WHERE visit_date>=Start_Date and Visit_date<=End_Date GROUP BY PATIENT_ID
    ) a
    group by COUNTS
    order by COUNTS;
END Clinic_Master;
end Clinic_Rate;
/

 

 

c#调用

 

private void Data_Load1()
    {
        OracleConnection newConn = MyConn.Conn_Oracle();
        newConn.Open();
        OracleCommand dmCmd = new OracleCommand("SXXX_SELDM_XML.dept_dict", newConn);        //调用包中存储过程GetDM                        
        dmCmd.CommandType = CommandType.StoredProcedure;
 
        OracleParameter param_p_id = new OracleParameter("code", OracleType.Number);
        param_p_id.Direction = ParameterDirection.Input;
        param_p_id.Value = 148;
        OracleParameter param = new OracleParameter("C_DM_DEPT", OracleType.Cursor);
        param.Direction = ParameterDirection.Output;
        DataSet MyDataSet = new DataSet();
        dmCmd.Parameters.Add(param_p_id);
        dmCmd.Parameters.Add(param);
        OracleDataAdapter MyDataAdapter = new OracleDataAdapter();
        MyDataAdapter.SelectCommand = dmCmd;
        MyDataAdapter.Fill(MyDataSet, "Clinic_Data");
        GridView2.DataSource = MyDataSet.Tables["Clinic_Data"];
        GridView2.DataBind();
    }
C#中,如果你需要执行复杂的Oracle SQL查询,可以使用ADO.NET提供的OracleCommand对象配合SqlCommandBuilder来构建动态SQL。以下是一个示例: ```csharp using Oracle.Data.Client; using Oracle.Data.OdpNet; using System; public class ComplexOracleQueryExample { public void ExecuteComplexQuery(string connectionString, string sql) { // 创建OracleConnection对象 using (var connection = new OracleConnection(connectionString)) { try { // 打开连接 connection.Open(); // 创建OracleCommand对象并设置SQL using (var command = new OracleCommand(sql, connection)) { // 如果查询结果包含多个表,则创建OracleDataAdapter和DataTable var adapter = new OracleDataAdapter(command); var dataTable = new DataTable(); adapter.Fill(dataTable); // 现在你可以处理填充后的DataTable foreach (DataRow row in dataTable.Rows) { Console.WriteLine(row["ColumnName"]); } } } catch (Exception ex) { Console.WriteLine($"Error executing query: {ex.Message}"); } } } } // 调用函数,传入数据库连接字符串和复杂的SQL查询 string connectionString = "Data Source=your_data_source;User Id=your_username;Password=your_password"; string complexSql = @" SELECT a.column1, b.column2 FROM table_a a JOIN table_b b ON a.id = b.parent_id WHERE a.date >= TO_DATE('01-JAN-2023', 'DD-MON-YYYY') AND b.status IN ('OPEN', 'IN_PROGRESS')"; ComplexOracleQueryExample example = new ComplexOracleQueryExample(); example.ExecuteComplexQuery(connectionString, complexSql);
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值