Sys_Refcursor为空

时间:2018-03-21 20:29:02

标签: oracle

我有这个c#代码

public static DataSet Get_Workflow_Def()
{
    OracleConnection conn = DatabaseHelper.getOracleConnection();

    DataSet dataset = new DataSet();

    Log.Info("Opening connection");
    conn.Open();

    OracleCommand cmd = new OracleCommand("CTS.GET_WORKFLOW_DEF", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("p_Dataset", OracleDbType.RefCursor).Direction = 
    ParameterDirection.Output;

    Log.Info("Executing query");
    cmd.ExecuteNonQuery();

    OracleDataAdapter da = new OracleDataAdapter(cmd);
    da.Fill(dataset);
    conn.Close();

    return dataset;
}

调用此程序

    create or replace procedure CTS.GET_WORKFLOW_DEF(p_Dataset OUT 
    Sys_Refcursor)

    as

    begin
     Open p_Dataset For
     Select WKF_ID,
            WKF_WORKFLOW_ID,
            WKF_WORKFLOW_NAME,
            WKF_WORKFLOW_VERSION,
            WKF_WORKFLOW_SCHEMA
     FROM CTS.WKF_WORKFLOW_MASTER
     WHERE WKF_WORKFLOW_ACTIVE = '1'
     ORDER BY WKF_ID DESC;

    end GET_WORKFLOW_DEF;

如果我执行查询,我会得到我要查找的信息,但RefCursor为空。我是Oracle新手。任何人都可以看到我错在哪里?

1 个答案:

答案 0 :(得分:0)

发现我的问题我需要在da.fill(dataset)之前添加这一行;在我的c#代码

中实例化OracleDataAdapter之后
    da.TableMappings.Add("Table", 
    ConfigurationManager.AppSettings["DBPullTable"].ToString());