2012-12-12 3 views
0

Oracle 및 .NET과 관련된 매우 드문 문제점이 있습니다. 올바르게 작동하는 제품 목록을 검색하는 간단한 select가 있습니다. 그러나 저장 프로 시저를 사용하면 실행하지 않는 것처럼 보이지만 누락 된 오류나 매개 변수에 대해서는 아무 것도 말해주지 않습니다. SQL Developer에서 실행할 때 올바르게 작동합니다. Oracle에서 저장 프로 시저가 .NET에서 실행되지 않습니까?

OracleCommand ora_cmd = new OracleCommand("a6r1.PR_ABC_P_ALTA_TARJETA_PAYWARE", ora_conn); 
ora_cmd.BindByName = true; 
ora_cmd.CommandType = CommandType.StoredProcedure; 

int exito = 0; 

ora_cmd.Parameters.Add("Lc_Param_Issuer", OracleDbType.Varchar2, issuer, ParameterDirection.Input); 
ora_cmd.Parameters.Add("Ln_Param_Valid_Product", OracleDbType.Varchar2, DropDownListProducto.SelectedValue.ToString(), ParameterDirection.Input); 
ora_cmd.Parameters.Add("Ln_Param_Total", OracleDbType.Int32, Convert.ToInt32(TextBoxCantidad.Text) , ParameterDirection.Input); 
ora_cmd.Parameters.Add("Lc_Param_User", OracleDbType.Varchar2, user, ParameterDirection.Input); 
ora_cmd.Parameters.Add("Lc_Encrypted_Password", OracleDbType.Varchar2, pass, ParameterDirection.Input); 
ora_cmd.Parameters.Add("Lc_Exito", OracleDbType.Int32, exito, ParameterDirection.Output); 
/*********************Oracle Command**********************************************************************/ 

ora_cmd.ExecuteNonQuery(); 

SP에

여기에 배치하기에 너무 큰, 그래서 난 단지 헤더를 추가합니다.

PROCEDURE PR_ABC_P_ALTA_TARJETA_PAYWARE (
    Lc_Param_Issuer In Varchar2, 
    Ln_Param_Valid_Product In Varchar2, 
    Ln_Param_Total In Number, 
    Lc_Param_User In Varchar2, 
    Lc_Encrypted_Password In Varchar2, 
    Lc_Exito Out Number 
    ) 

도움이나 의견이 있으면 감사하겠습니다.

+1

당신은 더 나은 코드를 들여 쓰기를해야한다. – gdoron

답변

0

이 시도 :

using Oracle.DataAccess; 
    using Oracle.DataAccess.Client; 

    public DataTable ExecuteSP() 
    { 
     using (OracleConnection cn = new OracleConnection(GetConnectionString())) 
     { 
      OracleDataAdapter da = new OracleDataAdapter(); 
      OracleCommand cmd = new OracleCommand(); 
      cmd.Connection = cn; 
      cmd.CommandText = "PR_ABC_P_ALTA_TARJETA_PAYWARE"; 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.BindByName = true; 
      cmd.Parameters.Add("Lc_Param_Issuer", OracleDbType.Varchar2, issuer, ParameterDirection.Input); 
      cmd.Parameters.Add("Ln_Param_Valid_Product", OracleDbType.Varchar2, DropDownListProducto.SelectedValue.ToString(), ParameterDirection.Input); 
      cmd.Parameters.Add("Ln_Param_Total", OracleDbType.Int32, Convert.ToInt32(TextBoxCantidad.Text) , ParameterDirection.Input); 
      cmd.Parameters.Add("Lc_Param_User", OracleDbType.Varchar2, user, ParameterDirection.Input); 
      cmd.Parameters.Add("Lc_Encrypted_Password", OracleDbType.Varchar2, pass, ParameterDirection.Input); 
      cmd.Parameters.Add("Lc_Exito", OracleDbType.Int32, exito, ParameterDirection.Output); 

      cmd.Parameters.Add("T_CURSOR", OracleDbType.RefCursor).Direction = ParameterDirection.Output; 
      da.SelectCommand = cmd; 
      DataTable dt = new DataTable(); 
      da.Fill(dt); 
      return dt; 
     } 
    } 
+0

메모리 사용을 위해'usingData' 문에'OracleDataAdapter'와'OracleCommand'를 래핑하십시오. –

관련 문제