ADO.NET ConnectedMimari

ActiveX Data Objects.NET ADO.NET

ADO.NET Connected Mimari

ADO.NET Nedir ? : Veri tabanımız ile bağlantı kura bildiğimiz bir köprüdür. Veri tabanımız da güncelleme , listeleme ,ekleme ,silme işlemleri yapa biliriz. ADO.NET ile SQL sorguları, komutlarını uygulama tarafımızda kullanabiliriz.
NOT : ACCESS, ORACLE içinde kullana biliyoruz.

SqlConnection : Veri Tabanına Bağlana Biliyoruz.

SqlCommand  : Bu sınıf SQL server üzerinde çalışacak komutlar veya Stored Procedure’ler için ilgili komut deyimlerini tutabilir.

SqlDataReader : SqlDataReader ile veritabanından veri döndürülmesi sağlanır. Bu sınıfta veri okunma işlemi sürekli ileri yönlüdür, geri yönlü değildir.


Ado.NET


 private void btnKaydet_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection("Server=.;Database=Northwind;Trusted_Connection=True");
            //SQL taraflı olarak bir sorgu çalıştırmak istersek referans alacağımız nesne "SqlCommand"dır. Bu SQL Management Studio'daki New Query ekranı gibidir. Tüm sorguları buraya yazarız.
            SqlCommand cmd = new SqlCommand("INSERT INTO Shippers(CompanyName,Phone) VALUES(@Ad,@Tel)", conn);
            //Eğer sorguda bir parametre olucaksa bu parametrelerin karşılığı gelen değerleri "cmd.Parameters.AddWithValue " property sinden verebiliriz. 
            cmd.Parameters.AddWithValue("@Ad", txtKargoAdi.Text);
            cmd.Parameters.AddWithValue("@Tel", txtTelefon.Text);
            conn.Open();
            int etkilenenSatirSayisi = cmd.ExecuteNonQuery();
            conn.Close();
            if (etkilenenSatirSayisi > 0)
            {
                MessageBox.Show("Başarıyla Eklendi");
            }
            else
            {
                MessageBox.Show("Hata Oluştu!");
            }


//Bağlantı Oluşturduk
            SqlConnection conn = new SqlConnection("Server=.;Database=Northwind;uid=sa;pwd=123");

            //Sql Komutu (Query) yazacağımız için SqlCommand nesnesini türettik. 
            SqlCommand cmd = new SqlCommand();

            //Aldığımız cmd adındaki SqlCommand nesnine yukarıda tanımladığımız bağlantıyı verdik.
            cmd.Connection = conn;

            //Bağlantıyı da verdiğimiz Komutu yani Query'yi yazdık. 
            cmd.CommandText = "UPDATE Shippers SET CompanyName = @Ad,Phone = @Tel WHERE ShipperID = 10";

            //Varolan Parametrelere karşılık gelen değerleri verdik.
            cmd.Parameters.AddWithValue("@Ad", txtKargoAdi.Text);
            cmd.Parameters.AddWithValue("@Tel", txtTelefon.Text);

            //Execute edileceği için bağlantıyı açtık.
            if (conn.State == ConnectionState.Closed) conn.Open();


            try//Bağlantıda herhangi bir hata çıkması durumunu try-catch ile kontrol ettik.
            {
                //Execute edip kaç satır etkilendiğini "etkilenen" adındaki değişkene verdik.
                int etkilenen = cmd.ExecuteNonQuery();
                //"etkilenen" değişkenine gelen satır sayısına göre eklendi veya eklenmedi kontrolü yapıp msj verdik..
                MessageBox.Show(etkilenen > 0 ? "Başarıyla Eklendi!" : "HATA OLUŞTU!");
            }
            catch (Exception ex)//Execute anında  hata alırsak bu catch bloguna düşer. Burada yapılması gereken hatanın ne olduğunu ekrana yazdırmak.
            {
                MessageBox.Show("HATA OLUŞTU!\nHata Mesajı : " + ex.Message);
            }
            finally
            {
                //Bağlantıyı kapattık.
                if (conn.State == ConnectionState.Open) conn.Close();
                //Bağlantıyı ram'dan ve projeden tümüyle yok eder.
                conn.Dispose();
            }
        }


  private void btnSil_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection("Server=.;Database=Northwind;uid=sa;pwd=123");
            SqlCommand cmd = new SqlCommand("DELETE FROM Shippers WHERE ShipperID=10", conn);
            conn.Open();
            int etkilenen = cmd.ExecuteNonQuery();
            conn.Close();
            MessageBox.Show(etkilenen > 0 ? "Silindi!" : "HATA OLUŞTU!");
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection("Server=.;Database=Northwind;uid=sa;pwd=123");
            SqlCommand cmd = new SqlCommand("SELECT CompanyName,Phone FROM Shippers",conn);
            try
            {

                //Okuyucudan önce veritabanına bağlanacağım için tanımladığım bağlantıyı açmam gerekir.
                if (conn.State == ConnectionState.Closed) conn.Open();
                //SqlDataReader => En hızlı veri okuma teknolojisine sahip nesnedir. Sadece ileri doğru okuma yaopabilir. Okuma tekniği ise, satır satır değil, kolon kolon'dur(Hücre,hücre).
                SqlDataReader okuyucu = cmd.ExecuteReader();

                //Eğer "okuyucu" üzerinde kayıt varsa, okuma işlemi gerçekleştirilir.
                if (okuyucu.HasRows)
                {
                    //SqlDataReader ile veri okurken genel olarak kullanılan döngü WHILE döngüsüdür. Tek bir koşula dayalı bir döngü olduğundan okuyucuda veri olduğu sürece döner. 
                    while (okuyucu.Read())
                    {
                        //DataReader üzerinden veri çekerken, vermiş olduğmuz kolon index numaraları SQL'deli kolon sıralamaları değil, sorgunuzdaki kolon sıralamalarıdır.
                        //bizim sorgumuzdaki sıralam aşağıdaki gibidir.
                        //Select CompanyName, Phone From Shippers => CompanyName => 0, Phone => 1

                        //1.YOL (GET METOTLARI) => Eğer veritabanından gelen kolonun veri tipinden eminseniz get metotlarını kullanarak, "boxing-unboxing" işlemlerinden arınmış bir şekilde verilere erişebilirsiniz. Eğer bu şekilde olmasaydı veri geldiğinde Convert veya Cast işlemi yapmamız gerekirdi.
                        lstKargolar.Items.Add(okuyucu.GetString(0) + " - " + okuyucu.GetString(1));

                        //2.YOL (Koleksiyon Mantığı) => Kolon Adını vererek verilerinizi çekme imkanına sahip olursunu. Avantajı, sorgunuza kolon ekleseniz bile index mantığyla çalışmadığınız için burada bir deişiklik yapmanıza gerek kalmaz. Dezavantajı: bir unboxing işlemi yapmak zorunda kalırsınız çünkü veri "object" tipinde size teslim edilir.
                        //lstKargolar.Items.Add(okuyucu["CompanyName"].ToString());

                        //3.YOL (Koleksiyon Mantığı) => 2.Yolla mantığı yanıdır yine object tipinde veriyi getirir. Kolon adı yerine index verirsiniz.
                        //lstKargolar.Items.Add(okuyucu[0].ToString());
                    }
                }
            }
            catch (Exception ex )
            {
                MessageBox.Show("HATA OLUŞTU => " + ex.Message);
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }
        }

        private void btnYenile_Click(object sender, EventArgs e)
        {
            lstKargolar.Items.Clear();
            SqlConnection conn = new SqlConnection("Server=.;Database=Northwind;uid=sa;pwd=123");
            SqlCommand cmd = new SqlCommand("SELECT CompanyName,Phone FROM Shippers", conn);
            try
            {

                //Okuyucudan önce veritabanına bağlanacağım için tanımladığım bağlantıyı açmam gerekir.
                if (conn.State == ConnectionState.Closed) conn.Open();
                //SqlDataReader => En hızlı veri okuma teknolojisine sahip nesnedir. Sadece ileri doğru okuma yaopabilir. Okuma tekniği ise, satır satır değil, kolon kolon'dur(Hücre,hücre).
                SqlDataReader okuyucu = cmd.ExecuteReader();

                //Eğer "okuyucu" üzerinde kayıt varsa, okuma işlemi gerçekleştirilir.
                if (okuyucu.HasRows)
                {
                    //SqlDataReader ile veri okurken genel olarak kullanılan döngü WHILE döngüsüdür. Tek bir koşula dayalı bir döngü olduğundan okuyucuda veri olduğu sürece döner. 
                    while (okuyucu.Read())
                    {
                        //DataReader üzerinden veri çekerken, vermiş olduğmuz kolon index numaraları SQL'deli kolon sıralamaları değil, sorgunuzdaki kolon sıralamalarıdır.
                        //bizim sorgumuzdaki sıralam aşağıdaki gibidir.
                        //Select CompanyName, Phone From Shippers => CompanyName => 0, Phone => 1

                        //1.YOL (GET METOTLARI) => Eğer veritabanından gelen kolonun veri tipinden eminseniz get metotlarını kullanarak, "boxing-unboxing" işlemlerinden arınmış bir şekilde verilere erişebilirsiniz. Eğer bu şekilde olmasaydı veri geldiğinde Convert veya Cast işlemi yapmamız gerekirdi.
                        lstKargolar.Items.Add(okuyucu.GetString(0) + " - " + okuyucu.GetString(1));

                        //2.YOL (Koleksiyon Mantığı) => Kolon Adını vererek verilerinizi çekme imkanına sahip olursunu. Avantajı, sorgunuza kolon ekleseniz bile index mantığyla çalışmadığınız için burada bir deişiklik yapmanıza gerek kalmaz. Dezavantajı: bir unboxing işlemi yapmak zorunda kalırsınız çünkü veri "object" tipinde size teslim edilir.
                        //lstKargolar.Items.Add(okuyucu["CompanyName"].ToString());

                        //3.YOL (Koleksiyon Mantığı) => 2.Yolla mantığı yanıdır yine object tipinde veriyi getirir. Kolon adı yerine index verirsiniz.
                        //lstKargolar.Items.Add(okuyucu[0].ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("HATA OLUŞTU => " + ex.Message);
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }
        }
    }
}


Yorumlar

Bu blogdaki popüler yayınlar

En İyi 20 Hacker Duvar Kağıtları