none
Ado.Net SQlTransaction Kullanımı RRS feed

  • Soru

  • Arkadaşlar merhaba;

    Ado.Net yapısı ile SQlTransaction kullanmak istiyorum. Fakat şu şekilde bir hata alıyorum:

    "Komuta atanan bağlantı beklemedeki yerel işlem içinde olduğunda, ExecuteNonQuery, komutun bir işleme sahip olmasını gerektirir. Komutun Transaction özelliği başlatılmamış."

    Kod Yapısı şu şekilde:

    SqlTransaction sqlTransaction = ConString.BeginTransaction(); return Tools.ExecuteNonQuery(ConString, Command, sqlTransaction); // Buradan ExecuteNonQuery adında bir metoda gidiyorum.

    Metot şu şekilde: public static bool ExecuteNonQuery(SqlConnection con, SqlCommand cmd, SqlTransaction transaction) { try { if (cmd.Connection.State == ConnectionState.Closed) cmd.Connection.Open(); //else //cmd.Connection.Close(); int etk = cmd.ExecuteNonQuery(); // Bu adımda hata alıyorum transaction.Commit(); return etk > 0 ? true : false; } catch (Exception ex) { transaction.Rollback(); throw new Exception(ex.ToString()); } finally { cmd.Connection.Close(); } }

    Execute komutunu çalıştırınca hata alıyorum sebebi ne olabilir?

    8 Mart 2020 Pazar 15:09

Yanıtlar

Tüm Yanıtlar

  • selam,

    https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlconnection.begintransaction?view=netframework-4.8

    bu linkten kontrol edermisin. SqlCommand ve SqlConnection'ın Transaction'ı belirtmen lazım

    Çözemezsen metodu düzenler gönderirim

    8 Mart 2020 Pazar 15:28
  • Neden entity framework kullanmıyorsunuz diye sorsam  ? 

    8 Mart 2020 Pazar 17:24
  • Çünkü daha yavaş.

    Projede hız önemli.Bu sebeple Ado.Net yapısını kullandım.

    Doğru bir tercih yaptığımı düşünüyorum Mehmet Bey ama görüşünüzü paylaşırsanız sevinirim.

    8 Mart 2020 Pazar 18:53
  • Genel olarak tavsiye etmeyeceğim bir yapı kullanmissiniz (using blokları ile olmasını beklerdim), ama buardaki hata SqlCommand'e Transaction'i atamamaniz.

    cmd.Transaction = transaction;



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak İşaretleyen metehan koray 8 Mart 2020 Pazar 19:58
    • Yanıt İşaretini Geri Alan metehan koray 8 Mart 2020 Pazar 19:58
    • Yanıt Olarak İşaretleyen metehan koray 8 Mart 2020 Pazar 20:00
    8 Mart 2020 Pazar 19:06
  • Metodu şu şekilde düzenledim. Using Bloğu kulladım. Şu şekilde çalıştı.

    public static bool ExecuteNonQuery(SqlConnection con, SqlCommand cmd, SqlTransaction transaction)
            {
                try
                {
                    using (var trans = cmd.Transaction)
                    {
                        if (cmd.Connection.State == ConnectionState.Closed)
                            cmd.Connection.Open();
    
                        cmd.Transaction = transaction;
    
                        int etk = cmd.ExecuteNonQuery();
    
                        transaction.Commit();
    
                        return etk > 0 ? true : false;
                    }
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    throw new Exception(ex.ToString());
                }
                finally
                {
                    cmd.Connection.Close();
                }
            }

    8 Mart 2020 Pazar 20:00
  • Çünkü daha yavaş.

    Projede hız önemli.Bu sebeple Ado.Net yapısını kullandım.

    Doğru bir tercih yaptığımı düşünüyorum Mehmet Bey ama görüşünüzü paylaşırsanız sevinirim.

    EF'i olması gerektiği gibi kullanmamış olabilir misiniz? "Daha Yavaş" kanısına nasıl vardınız?

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    9 Mart 2020 Pazartesi 09:01
  • Çünkü daha yavaş.

    Projede hız önemli.Bu sebeple Ado.Net yapısını kullandım.

    Doğru bir tercih yaptığımı düşünüyorum Mehmet Bey ama görüşünüzü paylaşırsanız sevinirim.

          Ne derece bir hızdan bahsediyoruz ki ? Ticari amaçla program yazıyorsanız EF gayet yeterli bence.Programın hızlı olmasının yanında hızlı da geliştirebilmeniz lazım, yarın bir hata çıkınca o ado.net kodları arasında kaybolma ihtimaliniz yüksek benden demesi.
    9 Mart 2020 Pazartesi 17:35
  • Çünkü daha yavaş.

    Projede hız önemli.Bu sebeple Ado.Net yapısını kullandım.

    Doğru bir tercih yaptığımı düşünüyorum Mehmet Bey ama görüşünüzü paylaşırsanız sevinirim.

    Yavaşlık doğru metriklere vurduğunuzda anlamlıdır. Ürün hakkında bilgi vermiyorsunuz gerçekten bu ihtiyacınız var mı bilemeyiz- ama koda baktığımda ihtiyacınız olduğunu düşünmüyorum-. Aynı mantıkla .net kullanmanız da uygulamanızı çok yavaşlatır bu durumda assembly'mi kullanmalısınız? SQL yerine doğrudan dosyadan okursanız dehşet hızlı çalışacaktır. Burada taş/kuş ilişkisi kurmak gerekiyor. 


    www.cihanyakar.com

    10 Mart 2020 Salı 07:13