2012-12-12 2 views
0

J'ai un problème très rare avec Oracle et .NET, j'ai une sélection simple qui récupère une liste de produits, qui fonctionne correctement. Mais alors, avec une procédure stockée, il ne semble pas l'exécuter, mais il ne dit rien sur les erreurs ou les paramètres manquants. Cela fonctionne correctement lorsqu'il est exécuté dans SQL Developer.La procédure stockée Oracle ne s'exécute pas dans .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(); 

Le SP est trop grand pour ici, donc je vais ajouter que l'en-tête.

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 
    ) 

Toute aide ou compréhension est appréciée.

+1

Vous devez indenter votre code mieux. – gdoron

Répondre

0

Essayez ceci:

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

S'il vous plaît, pour l'amour de la mémoire, enveloppez OracleDataAdapter' et 'OracleCommand' dans les instructions' using'. –

Questions connexes