0

我在 C# 中创建了一个 Windows 窗体应用程序,它将使用 Oracle 数据库中的一个过程。

在这种形式中DataGridView,我打算通过这个过程带来数据,但不知道我的代码中缺少什么,因为它没有给我带来任何数据。以下是两者的代码:

甲骨文程序:

PROCEDURE P_TRANSFITENS(vID in NUMBER) is
  cursor vAUX is
    select t.pro_in_codigo,
           t.alm_in_codigo,
           t.loc_in_codigo,
           u.loc_st_nome,
           t.nat_st_codigo,
           t.mvs_re_quantidade,
           t.mvs_st_loteforne
      from bd.est_movsumarizado t, bd.est_almoxlocal u
     where t.pro_in_codigo = vID
       and u.loc_in_codigo = t.loc_in_codigo;
  rDadosItem vAUX%ROWTYPE;  
begin
  open vAUX;
  loop
    fetch vAUX
      into rDadosItem;
    exit when vAUX%NOTFOUND;
  end loop;
  close vAUX;
end;

C#(按钮单击处理程序):

OracleDataAdapter adp = new OracleDataAdapter();
OracleConnection objConn = new OracleConnection();
objConn.ConnectionString = "Data Source=dtsource;User Id=user;Password=pass";
objConn.Open();
adp.SelectCommand = new OracleCommand();
adp.SelectCommand.Connection = objConn;

adp.SelectCommand.CommandText = "P_TRANSFITENS";
adp.SelectCommand.CommandType = System.Data.CommandType.StoredProcedure;
adp.SelectCommand.Parameters.Add("@vID", Convert.ToInt32(mskdId.Text)); 
DataTable dt = new DataTable();
adp.Fill(dt);
dtgrvDetalhesItem.DataSource = dt;

非常感谢!

PS:对不起我的英语不好。

4

2 回答 2

1

我认为格式应该是

PROCEDURE P_TRANSFITENS(vID in NUMBER, _RESULTS OUT SYS_REFCURSOR)
IS

BEGIN


    OPEN _RESULTS FOR
       select t.pro_in_codigo,
       t.alm_in_codigo,
       t.loc_in_codigo,
       u.loc_st_nome,
       t.nat_st_codigo,
       t.mvs_re_quantidade,
       t.mvs_st_loteforne
  from bd.est_movsumarizado t, bd.est_almoxlocal u
 where t.pro_in_codigo = vID
   and u.loc_in_codigo = t.loc_in_codigo;

END P_TRANSFITENS;

然后你添加这个

 cmd.CommandType = CommandType.StoredProcedure;
 OracleParameter refcursor = new OracleParameter("_RESULTS", OracleDbType.RefCursor);
 refcursor.Direction = ParameterDirection.Output;
 cmd.Parameters.Add(refcursor);
于 2012-08-30T21:18:30.593 回答
0

在我看来,您没有正确配置输入/输出参数。

尝试这样的事情:

OracleParameter param = cmd.Parameters.Add("vAUX", OracleDbType.RefCursor);
param.Direction = ParameterDirection.Output;
OracleParameter param2 = cmd.Parameters.Add("vID", OracleDbType.Int32);
param2.Direction = ParameterDirection.Input;

我无法测试它,但也许,试一试。

于 2012-08-30T21:13:32.750 回答