korasoglu Posted January 18, 2021 Share Posted January 18, 2021 (edited) Arkadaşlar sqlite transaction kullandığım zaman ardarda sorgularda herhangi bir hata yok ise kayıt yapıyor var isede tüm işlemleri iptal ediyor ve çok hızlıda yazıyor aynısı mysql ile denedim olmadı yapamadım sizden ricam transaction kullanmı mysql de nasıl olmalı yani hata varsa tüm işlemler iptal edilmeli SQL Baglan = new SQL(); var stopwatch = new Stopwatch(); stopwatch.Start(); Baglan.Baglanti.Open(); using (Baglan.Komut = new SQLiteCommand(Baglan.Baglanti)) { using (var transaction = Baglan.Baglanti.BeginTransaction()) { Baglan.Komut.CommandText = Cumle; Baglan.Komut.ExecuteNonQuery(); transaction.Commit(); } } Baglan.Baglanti.Close(); Edited January 18, 2021 by korasoglu Quote Link to comment Share on other sites More sharing options...
Editor pairs Posted January 19, 2021 Editor Share Posted January 19, 2021 Bu yardımcı olacaktır umarım. Please register to see this content. Quote Link to comment Share on other sites More sharing options...
korasoglu Posted January 23, 2021 Author Share Posted January 23, 2021 Sevgili pairs bu benzeri örnekleri inceleyerek denemiştim sorun şu try { for (int i = 0; i < 10; i++) { myCommand.CommandText = "insert into deneme (ad, soyad) VALUES (100, 'Description')"; myCommand.ExecuteNonQuery(); } for (int i = 0; i < 10; i++) { myCommand.CommandText = "insert into deneme2 (ad3, soyad) VALUES (100, 'Description')"; myCommand.ExecuteNonQuery(); } myTrans.Commit(); myConnection.Close(); } iki tablo yapısıda aynı sadece isimleri farklı yukarıdaki örnekte ikinci forda sütün adını ad yerine ad3 yazdım birinci for çalışyor ve yazıyor ikincisi hatalı ve try olduğu için hata vermiyor yazmıyorda ama sonuçta hatalı bir işlem olması rağmen veri tabanına veri yazıldı ben hata varsa yazılmasını istemiyorum. Normal düz mantık myTrans.Commit(); bunu görmeden yazma işlemi yapmaması lazım, zaten görmüyorda ama üstteki işlemde hata olmadığı için yazma işlemi yapıldı bu sorunu nasıl çözebilirim. Quote Link to comment Share on other sites More sharing options...
byprogressive Posted January 23, 2021 Share Posted January 23, 2021 SQL komutu gönderdiğiniz alanı try catch e alın ve catch içine transaction.rollback() yazın. finally olarak da bağlantıyı kapatırsınız. Quote Link to comment Share on other sites More sharing options...
korasoglu Posted February 1, 2021 Author Share Posted February 1, 2021 Arakadaşlar MYISAMda MySqlTransaction kullanımı yok galiba denemedik örnek koymadım myTrans.Commit(); görsün görmesin yazma işlemi gerçekleşiyor. araştırmalarımda myisamın foreign keys desteği yokmuş acaba MySqlTransaction desteğidemi yok andanmı bu hatayı alıyorum anlamadım yardımcı olursanız çok sevinirim. Aşağıdaki örnekte bir hata var buna karşılık try catch yapısı var Rollback(); var ama yinede yazma işlemi gerçekleşiyor. public void RunMySqlTransaction(connectionString) { MySqlConnection myConnection = new MySqlConnection(connectionString); myConnection.Open(); MySqlCommand myCommand = new MySqlCommand(); myCommand.Connection = myConnection; MySqlTransaction myTrans; // Start a local transaction myTrans = myConnection.BeginTransaction(); // Assign transaction object for a pending local transaction myCommand.Transaction = myTrans; try { myCommand.CommandText = String.Format("INSERT INTO deneme (ad) VALUES ('{0}')", "ahmet"); myCommand.ExecuteNonQuery(); myCommand.CommandText = String.Format("INSERT INTO deneme (ad21) VALUES ('{0}')", "ahmet"); myCommand.ExecuteNonQuery(); myTrans.Commit(); } catch (Exception e) { myTrans.Rollback(); } finally { myConnection.Close(); } } Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.