无法使用Oracle存储过程将数据加载到网格上

时间:2019-06-30 10:55:57

标签: c# oracle stored-procedures plsql

我创建了一个存储过程,用于从department表中选择部门信息,然后从C#中调用它,但是数据未加载到数据网格视图中。

此过程版本的Oracle 11G,这是我的SQL代码:

create or replace PROCEDURE PROCEDURE_SELECT_DEPARTMENT as c1
  SYS_REFCURSOR; 
BEGIN 
    OPEN c1 FOR 
        SELECT DEPARTEMENTID, DEPARTMENTNAME
        FROM TABLEDEPARTMENT; 
END;

这是我的C#代码:

OracleConnection con = new OracleConnection(ConfigurationManager.ConnectionStrings["con"].ToString());

DataTable dt = new DataTable();

con.Open();

OracleCommand cmd = new OracleCommand("PPROCEDURE_SELECT_DEPARTMENT", con);
cmd.CommandType = System.Data.CommandType.StoredProcedure;

OracleDataAdapter da = new OracleDataAdapter(cmd);
da.Fill(dt);

GridView1.DataSource = dt;
GridView1.DataBind();

当我加载网格时,数据不会出现。

1 个答案:

答案 0 :(得分:2)

尽管语法正确,但是您对过程的定义不正确。就目前而言,变量c1在过程中是局部的。游标被打开,但是随后什么也不做。您需要将c1定义为该过程的out参数。

create or replace procedure 
procedure_select_department(c1 out sys_refcursor)
as  
begin 
    open c1 for 
        select departementid, departmentname
        from tabledepartment; 
end;

现在,这会将光标返回到您的程序。不幸的是,我对c#知之甚少,也不知道您将需要如何修改该语句才能调用该过程。