none
Veritabanına kayıt yapılırken kayıt varmı yokmu sorgulama RRS feed

  • Soru

  • arkadaşlar ben datagridview üzerinden veritabanına kayıt yaptırıyorum.bu kayıt esnasında eğer bir kayıt var ise bu kayıt güncellensin eğer yok ise eklensin istiyorum nasıl yapabilirim  acaba yardımcı olabilirmisiniz acaba

    Teşekkürler.

    25 Nisan 2016 Pazartesi 06:06

Tüm Yanıtlar

  •         

            private void BtnKayit_Click(object sender, EventArgs e)
            {         

                        tcKimlikKontrol(); 

                        if (durum == false) //  tckimlik kayıtlı değil devam
                        {
                            SqlConnection baglanti = new SqlConnection(ConfigurationManager.ConnectionStrings["DB"].ConnectionString );
                            baglanti.Open();
                            string kayit = "INSERT INTO Tbl_Musteriler(yetkiliad,yetkilisoyad,tc) VALUES ( @yetkiliad,@yetkilisoyad,@tc) ";
                            SqlCommand komut = new SqlCommand(kayit,baglanti);
                            komut.Parameters.AddWithValue("yetkiliad", textBox1.Text);
                            komut.Parameters.AddWithValue("yetkilisoyad", textBox2.Text);
                            komut.Parameters.AddWithValue("tc", textBox3.Text);
                            komut.ExecuteNonQuery();                    
                            MessageBox.Show("İşlem başarı ile gerçekleşti  ", "Başarılı", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            textBox1.Focus();
                        }
                        else
                        {
                            MessageBox.Show("Girmiş olduğunuz Tc Kimlik No zaten kayıtlı!");
                        }              

            }

            public void tcKimlikKontrol()
            {
                durum = false;
                byte sayTcKimilk;
                 SqlConnection baglanti = new SqlConnection(ConfigurationManager.ConnectionStrings["DB"].ConnectionString );
                 baglanti.Open();
                 SqlCommand komut = new SqlCommand();
                komut.Connection =  baglanti;
                 komut.CommandText = "Select Count (tc) from Tbl_Musteriler Where tc='" + textBox3.Text + "'";
                sayTcKimilk = byte.Parse( komut.ExecuteScalar().ToString());
                if (sayTcKimilk > 0) durum = true;
                 baglanti.Close();
            }

    25 Nisan 2016 Pazartesi 07:00
  • @AysaYazılım :

    1. İlk metohodunda ne güzel parametre kullanmışsın keşke ikincide de kullansaydın. Bu şekilde kodda açık bırakmış oluyorsun. TextBox3 üzerinden tüm veritabanı silinebilir.

    2. Bu şekilde kontrol yapacaksan mutlaka o değer için bir UNIQUE Constraint oluşturmuş olman gerekir. Aksi halde herhangi bir eşzamanlılık (concurrency) durumunda aynı TCKN ile iki veya daha fazla kişi oluşması yaşanabilir. Bunun önüne geçmek için ya UNIQUE Constraint eklemen ya da Transaction bloğu açman gerekecektir.

    3. Bir şeyin varlığını Count() kullanmak yerine EXISTS kullanarak kontrol etmek daha iyi olacaktır. SQL Server açısından düşünürsen, Count için tüm satırları dolaşması gerekirken EXISTS de ilk bulduğu satır yeterli olacaktır.


    25 Nisan 2016 Pazartesi 07:36
  • Arkadaşlar söylemek istediğim şu benim bir tablom var IMALAT diye ben bu tablodan CINSI kolonuna göre filtreleyip ve topladığım değerleri başka bir datagridviewde gösteriyorum. aşağıdaki gibi

    private void LİSTELE()
            {
                string sorgu = "SELECT CINSI,  ISNULL(SUM(MIKTAR),0) AS 'TOPLAM' FROM IMALAT GROUP BY CINSI";
                SqlCommand cmd = new SqlCommand(sorgu, Baglanti.Con);

                SqlDataAdapter da = new SqlDataAdapter(cmd);

                DataTable dt = new DataTable();
                da.Fill(dt);

                dataGridView2.DataSource = dt;
            }

    şimdi bu değerler aşağıdaki tablo gibi oluyor

    sonra bu değerleri kaydet butonuna basınca TIMALAT veritabanına kaydetmek istiyorum ama şöyle;

    Eğer CINSI kolonundaki değer veritabanında kayıtlı ise güncellesin ama CINSI kolonunda kayıt yok ise eklesin.

    sql tablolar aşağıdaki gibi

    IMALAT

    TIMALAT

    TEŞEKKÜRLER


    • Düzenleyen umut Çelik 25 Nisan 2016 Pazartesi 10:58
    25 Nisan 2016 Pazartesi 10:57
  • @AysaYazılım :

    1. İlk metohodunda ne güzel parametre kullanmışsın keşke ikincide de kullansaydın. Bu şekilde kodda açık bırakmış oluyorsun. TextBox3 üzerinden tüm veritabanı silinebilir.

    2. Bu şekilde kontrol yapacaksan mutlaka o değer için bir UNIQUE Constraint oluşturmuş olman gerekir. Aksi halde herhangi bir eşzamanlılık (concurrency) durumunda aynı TCKN ile iki veya daha fazla kişi oluşması yaşanabilir. Bunun önüne geçmek için ya UNIQUE Constraint eklemen ya da Transaction bloğu açman gerekecektir.

    3. Bir şeyin varlığını Count() kullanmak yerine EXISTS kullanarak kontrol etmek daha iyi olacaktır. SQL Server açısından düşünürsen, Count için tüm satırları dolaşması gerekirken EXISTS de ilk bulduğu satır yeterli olacaktır.


    Harikasınız çok teşekkürler....
    • Yanıt Olarak Öneren sevdaca 25 Nisan 2016 Pazartesi 13:57
    • Yanıt Önerisini Geri Alan sevdaca 25 Nisan 2016 Pazartesi 13:58
    25 Nisan 2016 Pazartesi 13:32