使用来自C#的as(特定)参考光标返回参数调用Oracle函数?

时间:2018-09-25 18:00:32

标签: c# asp.net oracle oracle11g

我正在尝试在Oracle 11g数据库中执行包和函数。我有以下代码:

    CREATE OR REPLACE PACKAGE BODY reports_aml IS
    FUNCTION aml_web_service(p_last_name varchar2 := Null,
                p_first_name varchar2 := Null,
                p_entity_name varchar2 := Null ,
                p_user_name varchar2  := Null ,
                p_accuracy varchar2 := Null,
                p_counrty varchar2 := Null ) RETURN TVERIFY_RESULT 
    PIPELINED
                IS
c_result         result_cursor;
v_search_results t_table;
v_time_start     DATE := SYSDATE;
v_exec_time      VARCHAR2(20);
CURSOR cur (v_time_start in DATE  ,v_search_results in t_table)
--...*

在PL / SQL开发人员中,经过测试,我有结果表,我需要将结果插入网格 VisualStudio 2017,ASP.NET。 我使用下一个C#代码

using System;
//....
using Oracle.ManagedDataAccess.Client;
using Oracle.ManagedDataAccess.Types;
protected void btn1_Click(object sender, EventArgs e)
{
        List<PersonMin> pm = new List<PersonMin>();
        string ConStr = "User Id=xxx; password=xxx; Data 
        Source=xxx; Pooling=false";
        OracleConnection con = new OracleConnection();
        con.ConnectionString = ConStr;
        con.Open();
        //Command
        OracleCommand cmd = new OracleCommand("reports_aml.aml_rep1", con);
        cmd.CommandType = CommandType.StoredProcedure;
        //cmd.CommandType = CommandType.Text;
        //add parameters
        cmd.Parameters.Add("v_search_results", OracleDbType.RefCursor, 
ParameterDirection.ReturnValue);
        cmd.Parameters.Add("p_first_name", OracleDbType.Varchar2, 
ParameterDirection.Input);
        cmd.Parameters.Add("p_last_name", OracleDbType.Varchar2, 
ParameterDirection.Input);
        cmd.Parameters.Add("p_entity_name", OracleDbType.Varchar2, 
ParameterDirection.Input);
        cmd.Parameters.Add("p_user_name", OracleDbType.Varchar2, 
ParameterDirection.Input);
        cmd.Parameters.Add("p_accuracy", OracleDbType.Int16, 
ParameterDirection.Input);
        cmd.Parameters["p_first_name"].Value = fnTB.Text;
        cmd.Parameters["p_last_name"].Value = lnTB.Text;
        cmd.Parameters["p_accuracy"].Value = 
Int16.Parse(a1DDL.SelectedValue);
        cmd.Parameters["p_entity_name"].Value = null;
        cmd.Parameters["p_user_name"].Value = null;

        OracleDataReader dr = cmd.ExecuteReader();

        while (dr.Read())
        {
            pm.Add(new PersonMin(Int32.Parse(dr[0].ToString()), 
Int32.Parse(dr[1].ToString()), dr[2].ToString(), dr[3].ToString(), 
dr[4].ToString(), dr[5].ToString(), dr[6].ToString(), dr[7].ToString(), 
dr[8].ToString(), dr[9].ToString(), dr[10].ToString(), 
dr[11].ToString(), dr[12].ToString()));
        }
        dr.Close();
        con.Close();

我没有错误,但也没有结果 我不明白,怎么了

有帮助吗?

0 个答案:

没有答案