none
Veritabanı veri kaydetme sorunu (Formu kapattığımda veriler veritabanına kaydolmuyor) RRS feed

  • Soru

  • Merhaba C# Visual Studio ve Sql konusunda çalışmaya yeni başladım. Veritabanına veri kaydederken şöyle bir problem yaşıyorum: 2 tane buton kullandım programda biri mevcut verileri görüntülüyor diğeri ise yeni veri eklemek için yeni veri eklemek için açılan formda verileri girdiğimde ana formdaki görüntüle butonuyla o verileri görebiliyorum ama programı çalıştırmayı durduğumda ve veirtabanı tablosuna baktığımda veriler olaya kaydedilmemiş oluyor? SqlCompact kullanıyorum. VisualStudio 2015 community edition var.

    Kod:

      SqlConnection baglan = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Database1.mdf ;Integrated Security=True");

            private void buttonKaydet_Click(object sender, EventArgs e)
            {
                baglan.Open();
                SqlCommand komut = new SqlCommand("insert into [dbo].[Kutuphane] (KitapAdi, Yazar, SayfaSayisi) Values (@KitapAdi, @Yazar, @SayfaSayisi) ", baglan);
                komut.Parameters.AddWithValue("@KitapAdi", textBoxKitapAdi.Text);
                komut.Parameters.AddWithValue("@Yazar", textBoxYazar.Text);
                komut.Parameters.AddWithValue("@SayfaSayisi", textBoxSayfaSayisi.Text);
                komut.ExecuteNonQuery();
                baglan.Close();
                textBoxKitapAdi.Clear();
                textBoxYazar.Clear();
                textBoxSayfaSayisi.Clear();
                this.Close();
            }

    • Düzenleyen AlpTav 30 Ekim 2016 Pazar 14:44
    30 Ekim 2016 Pazar 10:26

Yanıtlar

  • Şimdi arkadaşım, senin program ile işin bitene kadar yani programın sonuna gelene kadar aşağıdaki Connection cümlesini kullanacaksın.Böylece veritabanındaki veriler burada silinmeden duracak ve sen gerekli testlerini yapacaksın.Artık Do Not Copy yapsanda olur.

    SqlConnection baglan = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\matpc\\Documents\\Visual Studio 2015\\Projects\\kutuphane\\kutuphane\\Database1.mdf ;Integrated Security=True");

    Ve diyelim ki artık projen bitti ve bu projeyi kullanmak istiyorsun. Visual Studiodan bu defa veritabanını "Copy İf Newer" yap ve Connection cümleni ise aşağıdaki gibi yapabilirsin.

    SqlConnection baglan = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Database1.mdf ;Integrated Security=True");

    Genelikle proje bittiğinde veritabanı projenin klasörüne dahil edilir.

    • Yanıt Olarak İşaretleyen AlpTav 30 Ekim 2016 Pazar 16:45
    30 Ekim 2016 Pazar 16:35
  • Dur söylemeyi unuttum heryerde sürekli bağlantı cümlesi yazma ilerde başına büyük bela alabilirsin :)

    Şimdi projene sağ tıkla ve yeni bir class ekle adına clsBaglantiCumlesi diyebilirsin.Ve oraya aşağıdaki gibi sana gerekli olan string cümleni ekle

    Böylelikle hemen Connection cümlende değişiklik yapabilirsin.

    Örnek kullanımı aşağıdaki resim gibi her baglantiya böyle eklersin.

    Aslına tüm bunların daha güzel yollarıda var ama sen yolun başındasın önce eziyeti görmen gerekli :)


    • Düzenleyen İSMAİL G 30 Ekim 2016 Pazar 16:50
    • Yanıt Olarak İşaretleyen AlpTav 30 Ekim 2016 Pazar 16:54
    30 Ekim 2016 Pazar 16:50

Tüm Yanıtlar

  • Merhaba C# Visual Studio ve Sql konusunda çalışmaya yeni başladım. Veritabanına veri kaydederken şöyle bir problem yaşıyorum: 2 tane buton kullandım programda biri mevcut verileri görüntülüyor diğeri ise yeni veri eklemek için yeni veri eklemek için açılan formda verileri girdiğimde ana formdaki görüntüle butonuyla o verileri görebiliyorum ama programı çalıştırmayı durduğumda ve veirtabanı tablosuna baktığımda veriler olaya kaydedilmemiş oluyor? SqlCompact kullanıyorum. VisualStudio 2015 community edition var.
    Codu paylaşman lazım nerden bilebiliriz ki:?
    30 Ekim 2016 Pazar 10:43
  •   SqlConnection baglan = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Database1.mdf ;Integrated Security=True");

            private void buttonKaydet_Click(object sender, EventArgs e)
            {
                baglan.Open();
                SqlCommand komut = new SqlCommand("insert into [dbo].[Kutuphane] (KitapAdi, Yazar, SayfaSayisi) Values (@KitapAdi, @Yazar, @SayfaSayisi) ", baglan);
                komut.Parameters.AddWithValue("@KitapAdi", textBoxKitapAdi.Text);
                komut.Parameters.AddWithValue("@Yazar", textBoxYazar.Text);
                komut.Parameters.AddWithValue("@SayfaSayisi", textBoxSayfaSayisi.Text);
                komut.ExecuteNonQuery();
                baglan.Close();
                textBoxKitapAdi.Clear();
                textBoxYazar.Clear();
                textBoxSayfaSayisi.Clear();
                this.Close();
            }
    30 Ekim 2016 Pazar 14:43
  • Merhaba C# Visual Studio ve Sql konusunda çalışmaya yeni başladım. Veritabanına veri kaydederken şöyle bir problem yaşıyorum: 2 tane buton kullandım programda biri mevcut verileri görüntülüyor diğeri ise yeni veri eklemek için yeni veri eklemek için açılan formda verileri girdiğimde ana formdaki görüntüle butonuyla o verileri görebiliyorum ama programı çalıştırmayı durduğumda ve veirtabanı tablosuna baktığımda veriler olaya kaydedilmemiş oluyor? SqlCompact kullanıyorum. VisualStudio 2015 community edition var.

    Codu paylaşman lazım nerden bilebiliriz ki:?
    Haklısınız hocam ekledim kodu.
    30 Ekim 2016 Pazar 14:55
  • Bu mdf dosyası debug klasöründe yeniden mi oluşuyor acaba ? 

    mdf dosyasını başka bir yere taşıyıp mesala c:\Data gibi olabilir, sqlConnection pathlerini ona göre ayarlayıp tekrar dener misin ?

    30 Ekim 2016 Pazar 15:12
  • "Database1.mdf"

    Bu dosyanın solution explorerdan copy to output directory özelliklerine bak. Oradaki seçenekler nedeniyle, her defasında uygulaman derlenirken yenisi oluşturuluyor olabilir. Doğal olarak eski verileri göremezsin. Çalışma dizininde bu dosya varsa, dont copy yapman yeterli olur. Değişiklik olduğunda yenilenmesi gerekiyorsa copy if newer seç... always copy her defasında veritabanını yeniden oluşturur.

    30 Ekim 2016 Pazar 15:17
    Moderatör
  • SqlConnection baglan = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Database1.mdf ;Integrated Security=True");

    hocam bu şekilde yaptım ama hata veriyor dosyayı görmeme hatası veriyor

    30 Ekim 2016 Pazar 15:24
  • Hocam copy if newer seçili
    30 Ekim 2016 Pazar 15:29
  • "Database1.mdf"

    Bu dosyanın solution explorerdan copy to output directory özelliklerine bak. Oradaki seçenekler nedeniyle, her defasında uygulaman derlenirken yenisi oluşturuluyor olabilir. Doğal olarak eski verileri göremezsin. Çalışma dizininde bu dosya varsa, dont copy yapman yeterli olur. Değişiklik olduğunda yenilenmesi gerekiyorsa copy if newer seç... always copy her defasında veritabanını yeniden oluşturur.

    dont copy yaptığımda baglan.Open(); satırında hata alıyorum
    30 Ekim 2016 Pazar 15:36
  • Aldığın hataları paylaşman sorununu çözmemize yardımcı olur. Lütfen hatanın resmini veya hatanın mesajını tam olarak yolla.

    Hatanın resmini almak için PrintScrren tuşuna bas ve paint dosyası açıp yapıştırarak kaydet ve bize gönder.

    30 Ekim 2016 Pazar 15:46
  • Aldığın hataları paylaşman sorununu çözmemize yardımcı olur. Lütfen hatanın resmini veya hatanın mesajını tam olarak yolla.

    Hatanın resmini almak için PrintScrren tuşuna bas ve paint dosyası açıp yapıştırarak kaydet ve bize gönder.

    Do not copy yaptığımda aldığım hata: http://prntscr.com/d0v1jr

    copy if newer yaptığımda herhangi bir hata almıyorum

    30 Ekim 2016 Pazar 15:53
  • Resimdeki hata senin Connection cümlenin yanlış yazıldığını belirtiyor. Sen |DataDirectory| olarak yazmışsın resimde görüldüğü kadarıyla. |DataDirectory| yaptığın zaman mecburen veritabanını programın çalışacağı klasöre atman gerekli. Bu durumda Visual Studio'dan veritabanını "Copy İf Newer" yapman gerekli.

    Copy İf Newer ; Her projeyi derledikten sonra veritabanını bir kopyasını programın çalışacağı klasöre otomatik kopyalar.

    Do Not Copy; Bu seçenek ise kopyalamayı iptal eder.



    30 Ekim 2016 Pazar 16:11
  • Peki mevcut problemi nasıl çözebilirim? Do not copy yaparsam çözülür mü veri kaybolması?
    30 Ekim 2016 Pazar 16:15
  • Sana verilerinin neden kaybolduğunu söyleyeyim.

    Sen Copy İf Newer seçeneğini seçince visual studio'da her derleme yapınca içine veri eklediğin veritabanını siliyor onun yerine kopyalanan veritabanını ekliyor.

    Şimdi sen bana veritabanının olduğu klasörün adres yolunu yolla sana ConnectionString cümlesi yazayım.Ondan sonra yapman gerekenide söyleyecem.

    30 Ekim 2016 Pazar 16:23
  • C:\Users\matpc\Documents\Visual Studio 2015\Projects\kutuphane\kutuphane

    Burada

    30 Ekim 2016 Pazar 16:26
  • Şimdi arkadaşım, senin program ile işin bitene kadar yani programın sonuna gelene kadar aşağıdaki Connection cümlesini kullanacaksın.Böylece veritabanındaki veriler burada silinmeden duracak ve sen gerekli testlerini yapacaksın.Artık Do Not Copy yapsanda olur.

    SqlConnection baglan = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\matpc\\Documents\\Visual Studio 2015\\Projects\\kutuphane\\kutuphane\\Database1.mdf ;Integrated Security=True");

    Ve diyelim ki artık projen bitti ve bu projeyi kullanmak istiyorsun. Visual Studiodan bu defa veritabanını "Copy İf Newer" yap ve Connection cümleni ise aşağıdaki gibi yapabilirsin.

    SqlConnection baglan = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Database1.mdf ;Integrated Security=True");

    Genelikle proje bittiğinde veritabanı projenin klasörüne dahil edilir.

    • Yanıt Olarak İşaretleyen AlpTav 30 Ekim 2016 Pazar 16:45
    30 Ekim 2016 Pazar 16:35
  • Şimdi arkadaşım, senin program ile işin bitene kadar yani programın sonuna gelene kadar aşağıdaki Connection cümlesini kullanacaksın.Böylece veritabanındaki veriler burada silinmeden duracak ve sen gerekli testlerini yapacaksın.Artık Do Not Copy yapsanda olur.

    SqlConnection baglan = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\matpc\\Documents\\Visual Studio 2015\\Projects\\kutuphane\\kutuphane\\Database1.mdf ;Integrated Security=True");

    Ve diyelim ki artık projen bitti ve bu projeyi kullanmak istiyorsun. Visual Studiodan bu defa veritabanını "Copy İf Newer" yap ve Connection cümleni ise aşağıdaki gibi yapabilirsin.

    SqlConnection baglan = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Database1.mdf ;Integrated Security=True");

    Genelikle proje bittiğinde veritabanı projenin klasörüne dahil edilir.

    Hocam çok teşekkür ederim yolu 1.deki gibi yapınca çalıştı. (Copy if newer ve do not copy ile de çalıştı)

    Proje bittiğinden kasıt build edeceğim zaman mı?

    30 Ekim 2016 Pazar 16:47
  • Dur söylemeyi unuttum heryerde sürekli bağlantı cümlesi yazma ilerde başına büyük bela alabilirsin :)

    Şimdi projene sağ tıkla ve yeni bir class ekle adına clsBaglantiCumlesi diyebilirsin.Ve oraya aşağıdaki gibi sana gerekli olan string cümleni ekle

    Böylelikle hemen Connection cümlende değişiklik yapabilirsin.

    Örnek kullanımı aşağıdaki resim gibi her baglantiya böyle eklersin.

    Aslına tüm bunların daha güzel yollarıda var ama sen yolun başındasın önce eziyeti görmen gerekli :)


    • Düzenleyen İSMAİL G 30 Ekim 2016 Pazar 16:50
    • Yanıt Olarak İşaretleyen AlpTav 30 Ekim 2016 Pazar 16:54
    30 Ekim 2016 Pazar 16:50
  • Teşekkürler hocam kullanacağım bu yöntemi. Projem çalıştı 2 gündür uğraşıyorum siz verdiniz doğru cevabı :)

    Ama böyle yapmanın neden yanlış olduğunu hala tam anlamadım :

    SqlConnection baglan = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Database1.mdf ;Integrated Security=True");

    30 Ekim 2016 Pazar 16:53
  • Teşekkürler hocam kullanacağım bu yöntemi. Projem çalıştı 2 gündür uğraşıyorum siz verdiniz doğru cevabı :)

    Ama böyle yapmanın neden yanlış olduğunu hala tam anlamadım :

    SqlConnection baglan = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Database1.mdf ;Integrated Security=True");

    Benim buradaki |DataDirectory| =
    C:\\Users\\matpc\\Documents\\Visual Studio 2015\\Projects\\kutuphane\\kutuphane
       buna eşit değil mi
    30 Ekim 2016 Pazar 16:56
  • Eğer veritabanını programın çalıştığı klasörün içine atarsan ve Do Not Copy yazarsan verilerin kaybolmaz ama sen veritabanını riske atarsın. Yanlışlıkla Visual Studio'dan projenin oluşturduğu uzantıları sildirirsen bununla beraber veritabanında yok olur gider. Yerinde olsam veritabanımı daha güvenli yerde bırakırım ve en son projem bittiğinde projenin çalışacağı klasöre dahil ederdim.

    30 Ekim 2016 Pazar 16:59
  • Teşekkürler hocam kullanacağım bu yöntemi. Projem çalıştı 2 gündür uğraşıyorum siz verdiniz doğru cevabı :)

    Ama böyle yapmanın neden yanlış olduğunu hala tam anlamadım :

    SqlConnection baglan = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Database1.mdf ;Integrated Security=True");

    Benim buradaki |DataDirectory| =
    C:\\Users\\matpc\\Documents\\Visual Studio 2015\\Projects\\kutuphane\\kutuphane
       buna eşit değil mi
    Hayır ona eşit olmuyor aşağıdakine eşit oluyor
    C:\\Users\\matpc\\Documents\\Visual Studio 2015\\Projects\\kutuphane\\kutuphane\\bin\\debug
    30 Ekim 2016 Pazar 17:02