0

Oracle データベースのプロシージャを使用する Windows Forms アプリケーションを C# で作成しました。

この形式では、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 に答える