IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Transaction Longue VB.Net et Oracle


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de jlm22
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2010
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 203
    Par défaut Transaction Longue VB.Net et Oracle
    Bonjour à tous,

    j'ai un programme VB qui exécute une transaction dans laquelle se trouve un delete puis un insert, et tant que l'insert ne s'est pas bien déroulé je ne commit pas les requêtes.
    Mon problème : Lorsque l'insert et le delete sont dans une instance de transaction différente le programme s'exécute en environ 3 min, en mettant le delete et l'insert dans la même transaction (ce qui est le but pour éviter les pertes de données) le programme dure environ 10 min.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
     Dim sql_transaction As OracleTransaction = conx.BeginTransaction
     
            MycommandSuppressionZARTFABOracle = New OracleCommand()
            MycommandSuppressionZARTFABOracle.Connection = conx
            MycommandSuppressionZARTFABOracle.Transaction = sql_transaction
            MycommandSuppressionZARTFABOracle.CommandType = CommandType.Text
            MycommandSuppressionZARTFABOracle.CommandText = "delete from ZARTFAB2"
            MycommandSuppressionZARTFABOracle.ExecuteNonQuery()
            sql_transaction.Commit()
            sql_transaction.Dispose()
            MsgBox("to")
            MycommandSuppressionZARTFABOracle.Dispose()
            sql_transaction = conx.BeginTransaction()
     
            Try
                While readerDataZARTFABprogressODBC.Read()
     
                    Dim daPrm_spc As New OracleCommand("insert into zartfab2 (" & _
                                        "csoc, cetab, cart, cdepot, nbjcons, nbjdluo, nbjgares, ancrecmax, qualmode " & _
                                            ", taffect, iper, ccouts, tofcout, destock " & _
                                            ", tach, tfab,dfabd,dfabf, cartent, cartsor, typfluxof, txfr, crgesof " & _
                                            ", tmpdes, trupdp, trupcbn, tepdp, tecri, tfabjour,heurfin, qdelai,cuqdel, decaldeb, cartref " & _
                                            ", nbjgarss, qualite, durcon, cstatutblo, cstatutdis, cstatuthl " & _
                                            ", tpfass, tdebloman, trecate " & _
                                            ") values " & _
                                            "(" & _
                                            ":csoc, :cetab, :cart, :cdepot, :nbjcons, :nbjdluo, :nbjgares, :ancrecmax, :qualmode " & _
                                            ", :taffect, :iper, :ccouts, :tofcout, :destock " & _
                                            ", :tach, :tfab, :dfabd, :dfabf, :cartent, :cartsor, :typfluxof, :txfr, :crgesof " & _
                                            ", :tmpdes, :trupdp, :trupcbn, :tepdp, :tecri, :tfabjour,'29/11/2010', :qdelai, :cuqdel, :decaldeb, :cartref " & _
                                            ", :nbjgarss, :qualite, :durcon, :cstatutblo, :cstatutdis, :cstatuthl " & _
                                            ", :tpfass, :tdebloman, :trecate " &
                                            ")", conx)
     
                    daPrm_spc.Transaction = sql_transaction
     
                    daPrm_spc.Parameters.Add(New OracleParameter("csoc", OleDbType.VarChar)).Value = UCase(readerDataZARTFABprogressODBC.Item("csoc"))
                    daPrm_spc.Parameters.Add(New OracleParameter("cetab", OleDbType.VarChar)).Value = UCase(readerDataZARTFABprogressODBC.Item("cetab"))
                    daPrm_spc.Parameters.Add(New OracleParameter("cart", OleDbType.VarChar)).Value = UCase(readerDataZARTFABprogressODBC.Item("cart"))
                    daPrm_spc.Parameters.Add(New OracleParameter("cdepot", OleDbType.VarChar)).Value = UCase(readerDataZARTFABprogressODBC.Item("cdepot"))
                    daPrm_spc.Parameters.Add(New OracleParameter("nbjcons", OleDbType.VarChar)).Value = nbjcons
                    daPrm_spc.Parameters.Add(New OracleParameter("nbjdluo", OleDbType.VarChar)).Value = nbjdluo
                    daPrm_spc.Parameters.Add(New OracleParameter("nbjgares", OleDbType.VarChar)).Value = nbjgares
                    daPrm_spc.Parameters.Add(New OracleParameter("ancrecmax", OleDbType.VarChar)).Value = ancrecmax
                    daPrm_spc.Parameters.Add(New OracleParameter("qualmode", OleDbType.VarChar)).Value = UCase(readerDataZARTFABprogressODBC.Item("qualmode"))
                    daPrm_spc.Parameters.Add(New OracleParameter("taffect", OleDbType.VarChar)).Value = IIf(readerDataZARTFABprogressODBC.Item("taffect") = True, 1, 0)
                    daPrm_spc.Parameters.Add(New OracleParameter("iper", OleDbType.VarChar)).Value = UCase(readerDataZARTFABprogressODBC.Item("iper"))
                    daPrm_spc.Parameters.Add(New OracleParameter("ccouts", OleDbType.VarChar)).Value = UCase(readerDataZARTFABprogressODBC.Item("ccouts"))
                    daPrm_spc.Parameters.Add(New OracleParameter("tofcout", OleDbType.VarChar)).Value = IIf(readerDataZARTFABprogressODBC.Item("tofcout") = True, 1, 0)
                    daPrm_spc.Parameters.Add(New OracleParameter("destock", OleDbType.VarChar)).Value = UCase(readerDataZARTFABprogressODBC.Item("destock"))
                    daPrm_spc.Parameters.Add(New OracleParameter("tach", OleDbType.VarChar)).Value = IIf(readerDataZARTFABprogressODBC.Item("tach") = True, 1, 0)
                    daPrm_spc.Parameters.Add(New OracleParameter("tfab", OleDbType.VarChar)).Value = IIf(readerDataZARTFABprogressODBC.Item("tfab") = True, 1, 0)
                    daPrm_spc.Parameters.Add(New OracleParameter("dfabf", OleDbType.VarChar)).Value = readerDataZARTFABprogressODBC.Item("dfabf")
                    daPrm_spc.Parameters.Add(New OracleParameter("dfabd", OleDbType.VarChar)).Value = readerDataZARTFABprogressODBC.Item("dfabd")
                    daPrm_spc.Parameters.Add(New OracleParameter("cartent", OleDbType.VarChar)).Value = UCase(readerDataZARTFABprogressODBC.Item("cartent"))
                    daPrm_spc.Parameters.Add(New OracleParameter("cartsor", OleDbType.VarChar)).Value = UCase(readerDataZARTFABprogressODBC.Item("cartsor"))
                    daPrm_spc.Parameters.Add(New OracleParameter("typfluxof", OleDbType.VarChar)).Value = UCase(readerDataZARTFABprogressODBC.Item("typfluxof"))
                    daPrm_spc.Parameters.Add(New OracleParameter("txfr", OleDbType.VarChar)).Value = txfr
                    daPrm_spc.Parameters.Add(New OracleParameter("crgesof", OleDbType.VarChar)).Value = UCase(readerDataZARTFABprogressODBC.Item("crgesof"))
                    daPrm_spc.Parameters.Add(New OracleParameter("tmpdes", OleDbType.VarChar)).Value = IIf(readerDataZARTFABprogressODBC.Item("tmpdes") = True, 1, 0)
                    daPrm_spc.Parameters.Add(New OracleParameter("trupdp", OleDbType.VarChar)).Value = IIf(readerDataZARTFABprogressODBC.Item("trupdp") = True, 1, 0)
                    daPrm_spc.Parameters.Add(New OracleParameter("trupcbn", OleDbType.VarChar)).Value = IIf(readerDataZARTFABprogressODBC.Item("trupcbn") = True, 1, 0)
                    daPrm_spc.Parameters.Add(New OracleParameter("tepdp", OleDbType.VarChar)).Value = IIf(readerDataZARTFABprogressODBC.Item("tepdp") = True, 1, 0)
                    daPrm_spc.Parameters.Add(New OracleParameter("tecri", OleDbType.VarChar)).Value = IIf(readerDataZARTFABprogressODBC.Item("tecri") = True, 1, 0)
                    daPrm_spc.Parameters.Add(New OracleParameter("tfabjour", OleDbType.VarChar)).Value = IIf(readerDataZARTFABprogressODBC.Item("tfabjour") = True, 1, 0)
                    daPrm_spc.Parameters.Add(New OracleParameter("qdelai", OleDbType.VarChar)).Value = qdelai
                    daPrm_spc.Parameters.Add(New OracleParameter("decaldeb", OleDbType.VarChar)).Value = readerDataZARTFABprogressODBC.Item("decaldeb")
                    daPrm_spc.Parameters.Add(New OracleParameter("cuqdel", OleDbType.VarChar)).Value = UCase(readerDataZARTFABprogressODBC.Item("cuqdel"))
                    daPrm_spc.Parameters.Add(New OracleParameter("cartref", OleDbType.VarChar)).Value = UCase(readerDataZARTFABprogressODBC.Item("cartref"))
                    daPrm_spc.Parameters.Add(New OracleParameter("nbjgarss", OleDbType.VarChar)).Value = nbjgarss
                    daPrm_spc.Parameters.Add(New OracleParameter("qualite", OleDbType.VarChar)).Value = IIf(readerDataZARTFABprogressODBC.Item("qualite") = True, 1, 0)
                    daPrm_spc.Parameters.Add(New OracleParameter("durcon", OleDbType.VarChar)).Value = durcon
                    daPrm_spc.Parameters.Add(New OracleParameter("cstatutblo", OleDbType.VarChar)).Value = readerDataZARTFABprogressODBC.Item("cstatutblo")
                    daPrm_spc.Parameters.Add(New OracleParameter("cstatutdis", OleDbType.VarChar)).Value = readerDataZARTFABprogressODBC.Item("cstatutdis")
                    daPrm_spc.Parameters.Add(New OracleParameter("cstatuthl", OleDbType.VarChar)).Value = readerDataZARTFABprogressODBC.Item("cstatuthl")
                    daPrm_spc.Parameters.Add(New OracleParameter("tpfass", OleDbType.VarChar)).Value = IIf(readerDataZARTFABprogressODBC.Item("tpfass") = True, 1, 0)
                    daPrm_spc.Parameters.Add(New OracleParameter("tdebloman", OleDbType.VarChar)).Value = IIf(readerDataZARTFABprogressODBC.Item("tdebloman") = True, 1, 0)
                    daPrm_spc.Parameters.Add(New OracleParameter("trecate", OleDbType.VarChar)).Value = IIf(readerDataZARTFABprogressODBC.Item("tdebloman") = True, 1, 0)
                    daPrm_spc.ExecuteNonQuery()
     
                End While
                sql_transaction.Commit()
     
            Catch ex As Exception
                sql_transaction.Rollback()
            Finally
                sql_transaction.Dispose()
                conx.Close()
                conx.Dispose()
                conx = Nothing
     
                Cnx_Base.Close()
                Cnx_Base.Dispose()
                Cnx_Base = Nothing
                readerDataZARTFABprogressODBC.Dispose()
            End Try

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    si tu fais un insert d'une table à une autre, ca ne sert à rien de passer par vb, tu peux faire insert into table1 [champs] select [champs de table2 et/ou valeurs fixées depuis vb] from table2
    déjà avec ca tu devrais gagner pas mal de temps
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé Avatar de jlm22
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2010
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 203
    Par défaut
    C'est pour un ETL, donc je passe par VB

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Citation Envoyé par jlm22 Voir le message
    C'est pour un ETL, donc je passe par VB
    Ce qu'il veut dire, c'est qu'au lieu de passer par un data reader puis d'executer les insert un par un en reprenant les données du reader, tu pourrais envisager de faire quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO zartfab2 [CHAMPS]
    SELECT [CHAMPS] FROM [TABLE]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT [DATA] FROM [TABLE]
    représente la requête de ton reader initial
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Membre confirmé Avatar de jlm22
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2010
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 203
    Par défaut
    Excusez-moi mais sa ne répond pas à ma question ! Pourquoi faisant un delete dans ma transaction je me retrouve avec 10 min d'exécution et en faisant un dispose entre les 2 j'ai seulement 2 min.

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    si les données viennent de 2 bases, il doit être possible de les lier pour ne pas passer par vb (gain de temps) (insert into base1.table1 from base2.table1) (c'est possible sur sql server, voir sur le forum oracle pour demander)

    certes ca ne répond toujours pas à ta question ^^
    enfin qu'une transaction allonge le temps d'exécution ce n'est pas nouveau, et je ne connais pas oracle spécialement, donc je ne sais pas si ce écart plutôt conséquent est logique
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Réponses: 13
    Dernier message: 21/04/2006, 15h39
  2. [ADO.Net][C#/Oracle]Comment gérer OracleType.VarChar?
    Par el_poitevin dans le forum Accès aux données
    Réponses: 5
    Dernier message: 30/03/2006, 13h08
  3. [Net*8] oracle wallet manager
    Par sch dans le forum Oracle
    Réponses: 1
    Dernier message: 08/11/2005, 17h07
  4. [ADO.Net][C#/Oracle] Comment utiliser une requête paramètrée ?
    Par kaboume dans le forum Accès aux données
    Réponses: 4
    Dernier message: 05/07/2005, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo