none
Bırakılmış bir nesneye erişilemiyor. Nesne adı: 'SqlCeCommand'. RRS feed

  • Soru

  • Öncelikle merhabalar.

    Ana tablomdan checkbox sütununun durumuna göre (1 ya da 0) iki farklı tabloya verileri aktarıyorum.Fakat Bir tabloya veri aktardıktan sonra diğer tabloya veri aktarmak istediğim zaman 

    Bırakılmış bir nesneye erişilemiyor.
    Nesne adı: 'SqlCeCommand'.

    hatası alıyorum.

    Kodlarım


            public SqlCeConnection bag = new SqlCeConnection("Data Source=C:\\Documents and Settings\\Administrator\\Belgelerim\\Visual Studio 2010\\Projects\\Callcenteruygulamasi\\Callcenteruygulamasi\\bin\\Debug\\evraks.sdf");
            public SqlCeCommand kmt = new SqlCeCommand();

            public SqlCeCommand cmd = new SqlCeCommand();

            public SqlCeDataAdapter adtr = new SqlCeDataAdapter();
            public DataSet dtst = new DataSet();
            public DataTable YeniTablo = new DataTable();                                               

    private void button1_Click(object sender, EventArgs e)
            {



                bag.Open();
                cmd.Connection = bag;
                cmd.CommandText = "insert into Siparis_onaylanan select id,ad,soyad,ünvan,cinsiyet,adres,gsm1,gsm2,telefon1,telefon2,faks,eposta,urun,adet,fiyat,satissaati,satici,teslimatadresi from bilgiside where onay=" +1;
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                bag.Close();
                MessageBox.Show("Siparişler onaylandı.");


            }

            private void button2_Click(object sender, EventArgs e)
            {




                bag.Open();
                kmt.Connection = bag;
                kmt.CommandText = "insert into Siparis_iptal select id,ad,soyad,ünvan,cinsiyet,adres,gsm1,gsm2,telefon1,telefon2,faks,eposta,urun,adet,fiyat,satissaati,satici,teslimatadresi from bilgiside where onay="+1;
                kmt.ExecuteNonQuery();
                kmt.Dispose();
                bag.Close();
                MessageBox.Show("Siparişler iptal edildi.");
            }

            private void button3_Click(object sender, EventArgs e)
            {
                bag.Open();
                kmt.Connection = bag;
                kmt.CommandText = "insert into bilgiside (ad) values ('can')";
                kmt.ExecuteNonQuery();
                kmt.Dispose();
                bag.Close();
                MessageBox.Show("Sipariş eklendi.");


            }

    25 Temmuz 2013 Perşembe 12:27

Yanıtlar

  • O zaman ya Dispose etmeyeceksiniz ya da her metodun içerisinde nesneleri yeniden oluşturacaksınız.

    private void button3_Click(object sender, EventArgs e)
    {
         bag.Open();
         SqlCeCommand kmt = new SqlCeCommand();
         kmt.Connection = bag;
         kmt.CommandText = "insert into bilgiside (ad) values ('can')";
         kmt.ExecuteNonQuery();
         kmt.Dispose();
         bag.Close();
         MessageBox.Show("Sipariş eklendi.");
    }


    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    C# VB.NET ASP.NET kitabı

    • Yanıt Olarak İşaretleyen Caner Ünver 25 Temmuz 2013 Perşembe 13:19
    25 Temmuz 2013 Perşembe 13:13

Tüm Yanıtlar

  • Bu hatayı büyük olasılıkla button2'den sonra button3'e tıkladığınız zaman veriyordur. button3_Click'de kullandığınız kmt nesnesini button2_Click'te Dispose etmiş oluyorsunuz.  Dispose edilen bir nesneyi bir daha kullanamazsınız. kmt.Dispose yerine Close'i denemelisiniz.


    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    C# VB.NET ASP.NET kitabı

    25 Temmuz 2013 Perşembe 12:39
  • Bu hatayı büyük olasılıkla button2'den sonra button3'e tıkladığınız zaman veriyordur. button3_Click'de kullandığınız kmt nesnesini button2_Click'te Dispose etmiş oluyorsunuz.  Dispose edilen bir nesneyi bir daha kullanamazsınız. kmt.Dispose yerine Close'i denemelisiniz.


    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    C# VB.NET ASP.NET kitabı

    Maalesef Close yöntemi mevcut değil Dispose ve Cancel  var.Cancel'i denedim direk sorguyu engelledi.Dispose'ta komut nesnesini yok ediyor çalıştırıldıktan sonra anladığım kadarıyla ne yapıcam bilemiyorum :)
    25 Temmuz 2013 Perşembe 13:04
  • O zaman ya Dispose etmeyeceksiniz ya da her metodun içerisinde nesneleri yeniden oluşturacaksınız.

    private void button3_Click(object sender, EventArgs e)
    {
         bag.Open();
         SqlCeCommand kmt = new SqlCeCommand();
         kmt.Connection = bag;
         kmt.CommandText = "insert into bilgiside (ad) values ('can')";
         kmt.ExecuteNonQuery();
         kmt.Dispose();
         bag.Close();
         MessageBox.Show("Sipariş eklendi.");
    }


    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    C# VB.NET ASP.NET kitabı

    • Yanıt Olarak İşaretleyen Caner Ünver 25 Temmuz 2013 Perşembe 13:19
    25 Temmuz 2013 Perşembe 13:13
  • O zaman ya Dispose etmeyeceksiniz ya da her metodun içerisinde nesneleri yeniden oluşturacaksınız.

    private void button3_Click(object sender, EventArgs e)
    {
         bag.Open();
         SqlCeCommand kmt = new SqlCeCommand();
         kmt.Connection = bag;
         kmt.CommandText = "insert into bilgiside (ad) values ('can')";
         kmt.ExecuteNonQuery();
         kmt.Dispose();
         bag.Close();
         MessageBox.Show("Sipariş eklendi.");
    }


    Çok teşekkür ederim.Nesneyi metodun içinde yeniden tanımlayınca düzeldi.
    25 Temmuz 2013 Perşembe 13:19