Probleme avec transaction

cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 - 30 janv. 2007 à 06:32
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 - 31 janv. 2007 à 20:55
bonjour,
je suis un peu perplexe la. je voudrai suntiliser des transaction ds mes requetes pour remplir des tables. (en fait je veux transerer des données d'une table en memoire ver sune table sql)

d'habitude je fais : (corrigez moi si je fais des betises...)

cmd.connection.open();
sqltransaction T = cmd.connection.begintransaction();
cmd.Transaction = T;
try
{
    foreach(datarow dr in matable.rows)
    {
         cmd.commandtext=scmd1;
        cmd.executenonquery();

        cmd.commandtext=scmd2;
        cmd.executenonquery()
        ....
    }
    T.commit();
}
catch (Exception ex)
{
    MessageBox.Show(ex.tostring());
    T.RollBack();
}
finally
{
    connection.close();
}

dans ce cas on les les infos que si le transfert en entier s'effectue correctement
je voudrais que seuls les commandes a l'interieur du foreach consituent une transaction

genre un t.commit() a chaque fin de boucle
mais je sais pas comment faire pour le debut...???

Merci de votre aide

3 réponses

TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
31 janv. 2007 à 00:56
Je comprend pas bien ton problème ?
Ceci ne te suffit pas ?

SqlConnection cn = new SqlConnection(...);

foreach(datarow dr in matable.rows)
{
        using (SqlTransaction transaction = cn.BeginTransatction())
         {
            try
               {
                  SqlCommand cmd = cn.CreateCommand();
                  cmd.Transaction = transaction;
                  cmd.CommandText = scmd1;
                  cmd.ExecuteNonQuery();

                  cmd.CommandText = scmd2;
                  cmd.ExecuteNonQuery();

                  transaction.Commit();
               }
         catch(SqlException sqle)
            {
               transaction.RollBack();
            }
      }
}

       

::|The S@ib|::
MVP C#.NET
0
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
31 janv. 2007 à 04:51
si sans doute
ct juste comment placer le begintransaction
d'ailleurs ca me permet de rebo ndir sur autre chose
a quoi sert le using....

j'ai deja posé des questions au sujet de form "modale" et on mettait
 using (form maform=new form())
{
if(maform.showdialog()==dialogresult....
}

alors que faire
form maform=new form();
if(maform.showdialog()==dialogresult....

fonctionne aussi

alors c quoi la difference?

QUel est l'avantaged 'utiliser using?

Merci
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
31 janv. 2007 à 20:55
using est equivalent dans ce cas à :


Form form;
try
{


form = new Form();
}
finally
{


form.Dispose();
}

Ca assure que l'appel au dispose de ta form soit bien appelé. Cà libère donc quoi qu'il arrive les ressources de form.

Celà marche uniquement pour les calsse implémentant IDisposeable.

::|The S@ib|:: MVP C#.NET
0
Rejoignez-nous