【发布时间】:2014-11-03 17:01:39
【问题描述】:
由于我是新手,我在执行 oracle DB 中的存储过程时遇到了一些问题。这里是 SP,它给出记录作为 %rowtype 类型的输出参数和 l_serno 作为数字类型的输入参数。
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 列:
请让我知道我在这里做错了什么。 提前致谢。
【问题讨论】:
-
不是
ParameterDirection.ReturnValue;,你试过ParameterDirection.Output;吗?; -
您好,Hassan Nisar,感谢您的回复。我也尝试使用 ParameterDirection.Output。仍然出现同样的错误。
-
交叉检查你在参数中提到的
OracleType。还要检查这个answer。 -
您好,感谢您的回复。正如你所建议的,我将“product.serno%type 中的 l_serno”更改为“l_serno number”,这起到了作用并开始工作。
标签: c# asp.net oracle stored-procedures