从SP(Oracle数据库)获取数据时出现问题

时间:2014-09-10 06:33:06

标签: c# asp.net oracle stored-procedures

由于我是新手,我在oracle DB中执行存储过程时遇到了一些问题。这是SP,它将记录作为输出参数,类型为%rowtype,l_serno为输入参数,类型为Number。

Create OR Replace procedure get_product(l_serno in product.serno%type,record out product%rowtype)
is

begin

select * into record from product where serno=l_serno;

end get_product;

使用C#,我试图从SP获取数据并在gridview上显示它。

OracleCommand cmd = new OracleCommand("get_product", Conn);
                cmd.CommandType = CommandType.StoredProcedure;
                Conn.Open();
                OracleParameter input = cmd.Parameters.Add("V_SERNO", OracleType.Number);
                OracleParameter output = cmd.Parameters.Add("ITEMS_CURSOR", OracleType.Cursor);
                input.Direction = ParameterDirection.Input;
                output.Direction = ParameterDirection.ReturnValue;
                input.Value = 2;
                OracleDataReader rd = cmd.ExecuteReader();
                DataTable dt = new DataTable();
                dt.Load(rd);
                GridView1.DataSource = dt;
                GridView1.DataBind();
                Conn.Close();

这里我收到错误

ORA-06550:第1行,第24栏:

PLS-00306:调用'GET_PRODUCT'时参数的数量或类型错误

ORA-06550:第1行,第7栏:

请让我知道我在这里做错了什么。 提前致谢。

1 个答案:

答案 0 :(得分:1)

您的程序有此签名:

(l_serno in product.serno%type,record out product%rowtype)

但是在你的C#代码中你指定了这个:

 OracleParameter output = cmd.Parameters.Add("ITEMS_CURSOR", OracleType.Cursor);

游标是指向结果集的指针,与变量不同。您可以更改C#代码:定义其属性与PRODUCT表的投影匹配的类。或者,更改存储过程以使用引用游标。

第二种方法可能不那么重要(尤其是因为你可以让我们为你做这件事)

create or replace procedure get_product
       (l_serno in product.serno%type,
            record out sys_refcursor)
is
begin
     open record for  
            select * from product
             where serno=l_serno; 
end get_product;