Comment utiliser DataAdapter avec SqlTransaction en C #?

J'ai besoin de créer 2 buttons, un pour démarrer une transaction ( startButton ) et un pour commitButton une transaction ( commitButton ).

Je me suis coincé en essayant de l'implémenter pour la command SELECT .

Lorsque j'appuie sur le commitButton j'obtiens l'erreur que la transaction a déjà terminée et n'est plus utilisable.

 public void startTransaction(IsolationLevel isolationLevel) { connectSQL(); connection.Open(); transaction = connection.BeginTransaction(isolationLevel); Console.WriteLine("Transaction started !"); } public void commitTransaction() { this.transaction.Commit(); connection.Close(); Console.WriteLine("Transaction commited !"); } public DataTable readAllRezervari() { try { Ssortingng selectSql = "SELECT * FROM Rezervari;"; SqlCommand sqlCommand = new SqlCommand(selectSql, connection, transaction); rezervariDataAdapter.SelectCommand = sqlCommand; rezervariDataAdapter.Fill(rezervariDataSet, "Rezervari"); } catch (Exception e) { Console.WriteLine("ERROR: " + e); try { transaction.Rollback(); } catch (Exception e2) { Console.WriteLine("ERROR: " + e2); } } finally { connection.Close(); } rezervariDataTable = rezervariDataSet.Tables["Rezervari"]; return rezervariDataTable; } 

Il semble que vous essayez d'utiliser Transaction Commit et Rollback pour permettre à l'user de valider ou d'annuler ses modifications. J'ai toujours cru que c'était au cas où il y aurait un problème avec le code ou datatables que vous pourriez empêcher que plusieurs modifications soient partiellement validées, ce qui entraînerait de mauvaises données. Je connais vraiment plus vb.net que c # alors pardonnez moi si mon format est désactivé.

Voici une pensée: commettre toutes leurs données à un datatable et le stocker dans une variable de session ou un état d'affichage

quelque chose comme

  rezervariDataTable = session("reservari"); 

si l'user touche le button de validation: Il fait le code pour écrire la transaction dans la database.

Si l'user clique sur la restauration:

  reservariDataTable = Nothing; 
 using (SqlConnection cn = new SqlConnection(ConnectionSsortingng.GetConnection())) { cn.Open(); SqlTransaction transction = cn.BeginTransaction(); SqlDataAdapter sda= new SqlDataAdapter("Select * From TableName", cn); sda.SelectCommand.Transaction = transction; sda.Fill(ds, "TableName"); transction.Commit(); }