Şimdi Ara

C# SQL ile yaptıklarım tabloyu etkilemiyor. ÇÖZÜLD

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
9
Cevap
0
Favori
1.941
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar C# ile .net ortamına bir bakış atayım dedim ama daha yolun başında takıldım kaldım. SQL ile bir tabloyu güncellemeyi deniyorum ama tablonun güncellenmeye pek bir niyeti yok. Bir bakabilir misiniz tablo mu gerici yoksa ben mi beceriksizim:

     
    dsGiris.Clear();
    SQLGirisKontrol.SelectCommand.Parameters["@kullanici"].Value = edKullanici.Text;
    SQLGirisKontrol.SelectCommand.Parameters["@sifre"].Value = edSifre.Text;
    SQLGirisKontrol.Fill(dsGiris);

    if (dsGiris.users.Rows.Count > 0)
    { //SORUN BU BÖLÜMDE
    sqlConnection2.Open();
    int chk = 0;
    if (chkHatirla.Checked)
    {
    chk = 1;
    }
    string sorgu = "UPDATE users SET hatirla = "+chk.ToString()+" WHERE kullanici = '" + edKullanici.Text + "'"; //hatirla kolonu bit

    SqlCommand htrl = new SqlCommand(sorgu, sqlConnection2);

    int a=htrl.ExecuteNonQuery();
    if (a == 0) {
    MessageBox.Show("Hatırlama güncellenemedi!","Veri tabanı hatası",MessageBoxButtons.OK, MessageBoxIcon.Error);
    }

    sqlConnection2.Close();
    }
    else
    {
    MessageBox.Show("Yanlış kullanıcı adı ya da şifre!", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }


    Bu kodlar ile kullandığım users tablosunda hiçbir değişiklik olmuyor. SQL sorgumda bir hata yok gibi. Hatta sorguyu

    UPDATE users SET ad='ahmet' WHERE kullanici = '" + edKullanici.Text + "'"

    yaptığımda da bir değişiklik olmuyor. Ve hata bu sorguyu Visual Studio da sorgu editörü gibi biryerde deniyorum sorunsuz çalışıyor. Yardımcı olursanız sevinirim.Ü



    < Bu mesaj bu kişi tarafından değiştirildi koala12 -- 13 Mayıs 2008; 10:00:19 >







  • string sorgu = "UPDATE users SET hatirla = "+chk.ToString()+" WHERE kullanici = '" + edKullanici.Text + "'";

    kullanici için NVARCHAR kullanıyorsan N'" + edKullanici.Text + "'"; şeklinde olmalı

    bu gibi durumlardan kurtulmak için şu şekilde yaz sqlcommandlarını böylece injectiondan da kurtulmuş olursun.

    SqlCommand command=new SqlCommand("UPDATE users SET hatirla=@par1 where kullanici=@par2");
    command.Parameters.Add("par1", SqlDbType.Nvarchar, 1 , chk.ToString(), ParameterDirection.Input);

    bu şekilde giriş yaparsan hem sql servera giden querynin execute planı çıkarılıp stored procedure gibi davranarak daha hızlı sonuçlar alabilirsin


    quote:

    Orjinalden alıntı: koala12

    Arkadaşlar C# ile .net ortamına bir bakış atayım dedim ama daha yolun başında takıldım kaldım. SQL ile bir tabloyu güncellemeyi deniyorum ama tablonun güncellenmeye pek bir niyeti yok. Bir bakabilir misiniz tablo mu gerici yoksa ben mi beceriksizim:

     
    dsGiris.Clear();
    SQLGirisKontrol.SelectCommand.Parameters["@kullanici"].Value = edKullanici.Text;
    SQLGirisKontrol.SelectCommand.Parameters["@sifre"].Value = edSifre.Text;
    SQLGirisKontrol.Fill(dsGiris);

    if (dsGiris.users.Rows.Count > 0)
    { //SORUN BU BÖLÜMDE
    sqlConnection2.Open();
    int chk = 0;
    if (chkHatirla.Checked)
    {
    chk = 1;
    }
    string sorgu = "UPDATE users SET hatirla = "+chk.ToString()+" WHERE kullanici = '" + edKullanici.Text + "'"; //hatirla kolonu bit

    SqlCommand htrl = new SqlCommand(sorgu, sqlConnection2);

    int a=htrl.ExecuteNonQuery();
    if (a == 0) {
    MessageBox.Show("Hatırlama güncellenemedi!","Veri tabanı hatası",MessageBoxButtons.OK, MessageBoxIcon.Error);
    }

    sqlConnection2.Close();
    }
    else
    {
    MessageBox.Show("Yanlış kullanıcı adı ya da şifre!", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }


    Bu kodlar ile kullandığım users tablosunda hiçbir değişiklik olmuyor. SQL sorgumda bir hata yok gibi. Hatta sorguyu

    UPDATE users SET ad='ahmet' WHERE kullanici = '" + edKullanici.Text + "'"

    yaptığımda da bir değişiklik olmuyor. Ve hata bu sorguyu Visual Studio da sorgu editörü gibi biryerde deniyorum sorunsuz çalışıyor. Yardımcı olursanız sevinirim.




  • darthridius cevap için teşekkürler. Hız konusunda bu önlemi her zaman alırım artık.

    Ama sorunum çözülmedi. Programlama tecrübem var ama C# ve .net olayında yeniyim. Şunu gördüm benim veritabanımın bir kopyasını bin/debug klasörüne de oluşturmuş. Tamam güzel oluştursun ama işin çözemediğim bir yönü var. SELECT sorguları yaparken ana klasördeki(WindowsApplication1 altında) veritabanından okuyor, UPDATE yaparken ise bin/debug altındaki ver tabanını kullanıyor. İki SqlCommand da sqlConnection2'yi kullanmasına rağmen böyle bir şey nasıl olabiliyor ki?? (sqlConnection1 yok zaten, tek bir connectionum var)

    Ayrıca bu MS SQL neden benim vertabanımı kopyalayıp duruyor. Ben yıllarca Delphi ile çalıştım, veritabanım kendi kafasına göre klonlanmadı. Daha sonra PHP&MySQL ikilisiyle uzun süre çalıştım yine hiç sorun yaşamamıştım. Bu .net olayı nedir diye bakayım dedim ama daha ilk haftadan beni çıldırtacak galiba.

    Bu veritabanı kopyalarıyla nasıl baş edeceğim??




  • Ana klasör altındakini sildim şunu dedi:

    Error 1 Unable to copy file "D:\Belgeler\Visual Studio 2008\Projects\VeriTabani\WindowsApplication1\Kale.mdf" to "bin\Debug\Kale.mdf". Could not find file 'D:\Belgeler\Visual Studio 2008\Projects\VeriTabani\WindowsApplication1\Kale.mdf'. WindowsApplication1


    Ben de zaten koyalama diye uğraşıyorum ama bu seferde çalışmıyor.
  • üstadım en temizi sen bir sql server kur makinana. db ini orada yarat birdaha sorun yaşamazsın
    quote:

    Orjinalden alıntı: koala12

    Ana klasör altındakini sildim şunu dedi:

    Error 1 Unable to copy file "D:\Belgeler\Visual Studio 2008\Projects\VeriTabani\WindowsApplication1\Kale.mdf" to "bin\Debug\Kale.mdf". Could not find file 'D:\Belgeler\Visual Studio 2008\Projects\VeriTabani\WindowsApplication1\Kale.mdf'. WindowsApplication1


    Ben de zaten koyalama diye uğraşıyorum ama bu seferde çalışmıyor.
  • http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=427451&SiteID=1 adresinde çözümü buldum. Başkasının başına da gelebilir diye yazıyorum.

    Visual Studio yazdığımız programı çalıştırdığımızda gerekli dosyaları(veritabanı da dahil olmak üzere) bin/debug klasörüne kopyalayarak oradaki dosyalar ile çalışıyor. Her program çalıştığında sizin baştan ürettiğiniz veritabanını tekrar kopyalayarak veritabanı üzerinde yapılan bütün değişiklikleri iptal ediyor. Bunun çözümü için:

    Solution Explorer'da veritabanını sağ tıklayıp Properties açıldığında "Copy to output directory" adlı bir property var ve 3 seçeneği var:

    Do not copy:
    Hiçbir zaman kopyalamıyor.
    Copy Always: Her program çalıştığında tekrar kopyalıyor. Yaptığınız değişiklikler (UPDATE, INSERT v.b.) tarih oluyor.
    Copy if newer: Orjinal dosya daha yeniyse kopyalıyor. Siz program vasıtasıyla vt üzerinde değişiklik yaptıysanız, kopya vt daha yeni olacağı için tekrar kopyalama yapmıyor. Böylece de benim gibi tablomda değişiklik olmuyor diye delirmiyorsunuz.



    < Bu mesaj bu kişi tarafından değiştirildi koala12 -- 13 Mayıs 2008; 9:54:19 >




  • iyi bulmuşsun buralarda msdn den çözüm bulabilen birini görmek güzel. daha büyük sorunlarda görüşmek üzere
    quote:

    Orjinalden alıntı: koala12

    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=427451&SiteID=1 adresinde çözümü buldum. Başkasının başına da gelebilir diye yazıyorum.

    Visual Studio yazdığımız programı çalıştırdığımızda gerekli dosyaları(veritabanı da dahil olmak üzere) bin/debug klasörüne kopyalayarak oradaki dosyalar ile çalışıyor. Her program çalıştığında sizin baştan ürettiğiniz veritabanını tekrar kopyalayarak veritabanı üzerinde yapılan bütün değişiklikleri iptal ediyor. Bunun çözümü için:

    Solution Explorer'da veritabanını sağ tıklayıp Properties açıldığında "Copy to output directory" adlı bir property var ve 3 seçeneği var:

    Do not copy:
    Hiçbir zaman kopyalamıyor.
    Copy Always: Her program çalıştığında tekrar kopyalıyor. Yaptığınız değişiklikler (UPDATE, INSERT v.b.) tarih oluyor.
    Copy if newer: Orjinal dosya daha yeniyse kopyalıyor. Siz program vasıtasıyla vt üzerinde değişiklik yaptıysanız, kopya vt daha yeni olacağı için tekrar kopyalama yapmıyor. Böylece de benim gibi tablomda değişiklik olmuyor diye delirmiyorsunuz.




  • quote:

    Orijinalden alıntı: koala12

    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=427451&SiteID=1 adresinde çözümü buldum. Başkasının başına da gelebilir diye yazıyorum.

    Visual Studio yazdığımız programı çalıştırdığımızda gerekli dosyaları(veritabanı da dahil olmak üzere) bin/debug klasörüne kopyalayarak oradaki dosyalar ile çalışıyor. Her program çalıştığında sizin baştan ürettiğiniz veritabanını tekrar kopyalayarak veritabanı üzerinde yapılan bütün değişiklikleri iptal ediyor. Bunun çözümü için:

    Solution Explorer'da veritabanını sağ tıklayıp Properties açıldığında "Copy to output directory" adlı bir property var ve 3 seçeneği var:

    Do not copy:
    Hiçbir zaman kopyalamıyor.
    Copy Always: Her program çalıştığında tekrar kopyalıyor. Yaptığınız değişiklikler (UPDATE, INSERT v.b.) tarih oluyor.
    Copy if newer: Orjinal dosya daha yeniyse kopyalıyor. Siz program vasıtasıyla vt üzerinde değişiklik yaptıysanız, kopya vt daha yeni olacağı için tekrar kopyalama yapmıyor. Böylece de benim gibi tablomda değişiklik olmuyor diye delirmiyorsunuz.



    harikasın arkadaşım bilgi süper..




  • quote:

    Orijinalden alıntı: koala12

    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=427451&SiteID=1 adresinde çözümü buldum. Başkasının başına da gelebilir diye yazıyorum.

    Visual Studio yazdığımız programı çalıştırdığımızda gerekli dosyaları(veritabanı da dahil olmak üzere) bin/debug klasörüne kopyalayarak oradaki dosyalar ile çalışıyor. Her program çalıştığında sizin baştan ürettiğiniz veritabanını tekrar kopyalayarak veritabanı üzerinde yapılan bütün değişiklikleri iptal ediyor. Bunun çözümü için:

    Solution Explorer'da veritabanını sağ tıklayıp Properties açıldığında "Copy to output directory" adlı bir property var ve 3 seçeneği var:

    Do not copy:
    Hiçbir zaman kopyalamıyor.
    Copy Always: Her program çalıştığında tekrar kopyalıyor. Yaptığınız değişiklikler (UPDATE, INSERT v.b.) tarih oluyor.
    Copy if newer: Orjinal dosya daha yeniyse kopyalıyor. Siz program vasıtasıyla vt üzerinde değişiklik yaptıysanız, kopya vt daha yeni olacağı için tekrar kopyalama yapmıyor. Böylece de benim gibi tablomda değişiklik olmuyor diye delirmiyorsunuz.




    Vallahi helal kafayı yemek üzereydim. Peki Do not copy ile copy if newer arasındaki farkı biraz daha açıklar mısın?




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.