2011-07-11 1 views
0

J'ai besoin de supprimer des données dans la base de données Oracle 10g à partir du site Web ASP.NET 2.0.Supprimer dans Oracle 10g du site Web asp.net - attendre le commint?

Méthode DeleteMonthPlan Je l'utilise lors de l'exécution de la commande de suppression. Le problème est que cette commande s'exécute longtemps "dans le navigateur" et finalement la commande de suppression n'est pas exécutée. Peut-être qu'il attend en commit? Quelle est la racine du problème?

Cette commande SQL DELETE C_PPC_PLAN WHERE MFG_MONTH = 'VALUE' est OK.

type de colonne MFG_MONTH est VARCHAR2 (16)

D'abord, je dois appeler la méthode DeleteMonthPlan et que je dois appeler InsertDatePlan.

private static void DeleteMonthPlan(string monthIndex) 
    { 
     try 
     { 
      using (var conn = new OracleConnection(GenerateConnectionString())) 
      { 
       conn.Open(); 

       var cmd = conn.CreateCommand(); 

       cmd.CommandText = string.Format("DELETE C_PPC_PLAN WHERE MFG_MONTH='{0}'", monthIndex); 

       cmd.ExecuteNonQuery(); 
      } 
     } 
     catch (Exception exception) 
     { 

      throw exception; 
     } 
    } 

Par exemple cette méthode que j'utilise sur insert et c'est OK.

public void InsertDatePlan(DatePlan dp, 
     string monthIndex) 
    { 
     DeleteMonthPlan(monthIndex); 
     try 
     { 
      using (var conn = new OracleConnection(GenerateConnectionString())) 
      { 
       conn.Open(); 

       var cmd = conn.CreateCommand(); 

       cmd.Parameters.Add(":Site", OracleType.VarChar).Value = dp.Site; 
       cmd.Parameters.Add(":Week", OracleType.VarChar).Value = dp.MfgWeek; 
       cmd.Parameters.Add(":Month", OracleType.VarChar).Value = dp.MfgMonth; 
       cmd.Parameters.Add(":Year", OracleType.VarChar).Value = dp.MfgYear; 
       cmd.Parameters.Add(":Input", OracleType.Number).Value = dp.Input; 
       cmd.Parameters.Add(":Output", OracleType.Number).Value = dp.Output; 
       cmd.Parameters.Add(":LMUser", OracleType.VarChar).Value = dp.LmUser; 
       cmd.Parameters.Add(":PartNo", OracleType.VarChar).Value = dp.PartNo; 
       cmd.Parameters.Add(":PartNoDesc", OracleType.VarChar).Value = dp.PartNoDesc; 


       cmd.CommandText = string.Format("INSERT INTO C_PPC_PLAN (CREATE_TIME, SITE, MFG_DAY,MFG_WEEK,MFG_MONTH,MFG_YEAR,INPUT,OUTPUT,LM_TIME,LM_USER,PART_NO,PART_NO_DESC)" 
          + " VALUES (to_date('{0}', 'dd-mm-yyyy hh24:mi:ss'), :Site ,to_date('{1}', 'dd-mm-yyyy hh24:mi:ss'),:Week," 
          + ":Month,:Year,:Input,:Output,to_date('{2}', 'dd-mm-yyyy hh24:mi:ss'),:LMUser,:PartNo,:PartNoDesc)" 
          , dp.CreateTime, dp.MfgDate, dp.LmTime); 

       cmd.ExecuteNonQuery(); 

      } 
     } 
     catch (Exception exception) 
     { 

      throw exception; 
     } 
    } 

J'ai essayé d'utiliser la transaction. J'appelle cette méthode sur le fond mais n'est jamais fini cela signifie que la partie

trans.Rollback(); or conn.Close(); n'est jamais exécutée.

private static void DeleteMonthPlan(string monthIndex) 
    { 
     var conn = new OracleConnection(GenerateConnectionString()); 
     conn.Open(); 

     OracleCommand cmd= conn.CreateCommand(); 

     OracleTransaction trans = conn.BeginTransaction(IsolationLevel.ReadCommitted); 
     cmd.Transaction = trans; 

     try 
     { 
      cmd.CommandText = "DELETE C_PPC_PLAN WHERE MFG_MONTH='6'"; 
      cmd.ExecuteNonQuery(); 
      trans.Commit(); 

     } 
     catch (Exception e) 
     { 
      trans.Rollback(); 
     } 
     finally 
     { 
      conn.Close(); 
     } 
    } 
+1

Pouvez-vous expliquer ce que signifie "la commande de suppression définitive n'est pas exécutée"? Est-ce qu'il expire? Est-ce qu'il renvoie une erreur? Si oui, quelle erreur? Est-ce qu'il fonctionne mais ne supprime aucune ligne? Ou autre chose? Pouvez-vous exécuter la même instruction DELETE via un autre outil interactif (c'est-à-dire SQL * Plus)? Est-ce qu'il fonctionne plus rapidement dans cet environnement? –

+0

Il est toujours en cours d'exécution, par exemple 5 minutes mais dans la table n'est aucun enregistrement pour supprimer ... Je ne reçois pas d'erreur. J'utilise PL/SQL pour tester cette commande et cela fonctionne. – totoz

Répondre

1

essayer

DELETE FROM C_PPC_PLAN WHERE MFG_MONTH='6' 

BTW votre code utilise "littéraux" dans certains endroits au lieu de variables de liaison (params) ce qui le rend vulnérable à l'injection SQL qui est un problème de sécurité vraiment sérieux!