Merhaba, C# SQL Connection Class Hazırlamak [Video Destekli] yazımla C# eğitim setime devam ediyorum. Bu yazımda sql işlemleri için kullandığımız kodları nasıl bir class içerisine alabileceğimizi göreceğiz. Daha önce class hazırlama yazıları yazmıştım ama yazdığım yazı email gönderme kodları ile ilgiliydi. Soru soranlar arasında hala SQL Connection işlemlerini class ile kullanmayanlar olduğunu gördüğüm için bu yazıyı yazma gereği hissettim. Hatta sessizde olsa bir video hazırladım. Yazının sonunda videoyu görebilirsiniz.
C# SQL Connection Class Hazırlamak [Video Destekli]
Bu ders için forma bir sql server’e bağlanıp, çektiğimiz verileri göstermek için bir DataGridView, veri eklemek için de bir Button ve MultiLine bir TextBox ekledim. Form açıldığında DataGridView dolu gelecek. Button’a tıkladığımızda MultiLine TextBox’un satırlarındaki verileri okuyarak veritabanına kayıt yapacağız. Yapılan kaydı DataGridview üzerine göstereceğiz ve ek olarak eklenen kayıtların sayısını alarak MessageBox ile göstereceğiz. Yani C# sql bağlantı yaparak istediğimiz işlemi yapacağız.
İlk olarak işlemleri uzun uzun yazılmış halini vereceğim. Daha sonra da kısaltılmış hallerini vereceğim. Bunun iki birbirinin kopyası iki form kullanacağım. İlk formda kodların uzun uzun yazılmış halleri olacak. İkinci formda da aynı kodların class dosyasına çekildikten sonra nasıl kullanıldığını gösterdiğim form olacak. İki formda da aynı nesneler olacak.
Şimdi kodları uzun uzun kullandığımız hallerini veriyorum. Tüm formu videodaki açıklama satırları olmadan vereceğim.
Kodları uzun uzun yazdığımız formun adı sqlislemleri‘dir. Kodların kısa hallerini yazacağımız formda sqlislemleri2 formudur.
sqlislemleri.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace testler_yazilar_icin { public partial class sqlislemleri : Form { public sqlislemleri() { InitializeComponent(); } SqlConnection con = new SqlConnection(); SqlDataAdapter da = new SqlDataAdapter(); SqlCommand com = new SqlCommand(); DataSet ds = new DataSet(); private void SQLConn_Load(object sender, EventArgs e) { griddoldur(); } void griddoldur() { con = new SqlConnection(@"Server = MUSTAFA\SQL2017; Database = _1453_STOKCARI; Trusted_Connection = True;"); da = new SqlDataAdapter("Select * From CARI_HESAPLARI", con); ds = new DataSet(); con.Open(); da.Fill(ds, "Cari"); dataGridView1.DataSource = ds.Tables["Cari"]; con.Close(); } void ekle() { con = new SqlConnection(@"Server = MUSTAFA\SQL2017; Database = _1453_STOKCARI; Trusted_Connection = True;"); string query = "INSERT INTO dbo.CARI_HESAPLARI (" + " Cari_Adi" + ", Cari_Kodu" + ", Cari_Telefon" + ", Cari_Sorumlu_Kisi" + ", Cari_Sorumlu_Telefon) " + " VALUES ( " + " '" + txt_ml.Lines[0] + "'" + ", '" + txt_ml.Lines[1] + "'" + ", '" + txt_ml.Lines[2] + "'" + ", '" + txt_ml.Lines[3] + "'" + ", '" + txt_ml.Lines[4] + "' )"; con.Open(); SqlCommand command = new SqlCommand(query, con); command.ExecuteNonQuery(); con.Close(); griddoldur(); } private void button1_Click(object sender, EventArgs e) { ekle(); } } }
Yukarıdaki kod alanının solundaki satır sayısına bakarsanız 70 satır olduğunu görebilirsiniz.. Daha burada update işlemi, yok. Sadece basit bir insert işlemi var.
C# sql bağlantı – SQLConnectionClass.cs
Şimdi hazırladığım class’ı vereceğim. Sonra kodları açıklayacağım.
using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text; namespace testler_yazilar_icin { public class SQLConnectionClass { private static string SQLConnectionString = @"Server = MUSTAFA\SQL2017; Database = _1453_STOKCARI; Trusted_Connection = True;"; private static SqlConnection con = new SqlConnection(); private static SqlDataAdapter da = new SqlDataAdapter(); private static SqlCommand com = new SqlCommand(); public static void Baglanti() { con = new SqlConnection(SQLConnectionString); if (con.State == System.Data.ConnectionState.Closed) { con.Open(); } } public static object Command(string query) { object obj; com.Connection = con; // SqlCommand com.CommandText = query; // SqlCommand obj = com.ExecuteScalar(); return obj; } public static DataTable Table(string query) { DataTable dt = new DataTable(); com.Connection = con; // SqlCommand com.CommandText = query; // SqlCommand da.SelectCommand = com; // // SqlCommand'ın bir select sorgusu olduğunu belirtiyoruz. da.Fill(dt); return dt; } } }
Bu class dosyamız da toplamda 45 satırdan oluşuyor. Tabi zamanla farklı işlemler istenildiğinde eklemeler yapılabilir. Örneğin. Bağlantıyı kapatma, Bulk insert kodları vs.
Dikkat ettiyseniz, SQL Command ve Table metodlarında yazan kodlarımız biraz farklılaşıyor. Form içinde kullandığımız gibi de kullanabiliriz. Ancak özellikle SQL Command metodunda tek değer almak istediğimizde yukarıdaki gibi olması gerekiyor. Aksi takdirde sürekli -1 değeri döner. Ayrıca, zatenc class’ın en üstünde tanımlamaları yaptık. Metodlar içerisinde tekrar new diyerek yeni tanımlamalar yapmaya gerek yok.
Şimdi sqlislemleri2 formumuzu görelim. Class hazırladıktan sonra işlemlerimizi kaç satıra düşürdük.
sqlislemleri2.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace testler_yazilar_icin { public partial class sqlislemleri2 : Form { public sqlislemleri2() { InitializeComponent(); } private void sqlislemleri2_Load(object sender, EventArgs e) { SQLConnectionClass.Baglanti(); griddoldur(); } void griddoldur() { dataGridView1.DataSource = SQLConnectionClass.Table("select * from CARI_HESAPLARI"); } void ekle() { SQLConnectionClass.Command("INSERT INTO dbo.CARI_HESAPLARI (" + " Cari_Adi" + ", Cari_Kodu" + ", Cari_Telefon" + ", Cari_Sorumlu_Kisi" + ", Cari_Sorumlu_Telefon) " + " VALUES ( " + " '" + txt_ml.Lines[0] + "'" + ", '" + txt_ml.Lines[1] + "'" + ", '" + txt_ml.Lines[2] + "'" + ", '" + txt_ml.Lines[3] + "'" + ", '" + txt_ml.Lines[4] + "' )"); griddoldur(); } private void button1_Click(object sender, EventArgs e) { ekle(); } } }
Gördüğünüz gibi C# sql bağlantı ve işlemleri kodlarımız ne kadar sadeleşti. Artık toplamda 52 satıra düşürdük. Daha da kısaltamaz mıyız? Kısaltabiliriz.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace testler_yazilar_icin { public partial class sqlislemleri2 : Form { public sqlislemleri2() { InitializeComponent(); } private void sqlislemleri2_Load(object sender, EventArgs e) { SQLConnectionClass.Baglanti(); griddoldur(); } private void griddoldur() {dataGridView1.DataSource = SQLConnectionClass.Table("select * from CARI_HESAPLARI");} private void button1_Click(object sender, EventArgs e) { SQLConnectionClass.Command("INSERT INTO dbo.CARI_HESAPLARI (" + " Cari_Adi" + ", Cari_Kodu" + ", Cari_Telefon" + ", Cari_Sorumlu_Kisi" + ", Cari_Sorumlu_Telefon) " + " VALUES ( " + " '" + txt_ml.Lines[0] + "'" + ", '" + txt_ml.Lines[1] + "'" + ", '" + txt_ml.Lines[2] + "'" + ", '" + txt_ml.Lines[3] + "'" + ", '" + txt_ml.Lines[4] + "' )"); griddoldur() } } }
Şuanda da 45 satıra düşürdük. Form Load eventi içindeki bağlantı satırını, Program.cs dosyasına da koyabilirsiniz. Böylece exe çalışmaya başladığı anda SQL Server’e bağlanır. Hatta bir kaç satır daha azaltabiliriz ama bu kadarı daha iyidir. Mesela griddoldur() metodunu kaldırıp, içindeki bir satır kodu load eventine ve kaydet işleminden sonrasına alabiliriz ama bu mantıklı olmayacaktır. Çünkü ileride sorgu değişebilir. O zaman yine formdaki iki sorguyu da değiştirmek durumunda kalırsınız ama şuan da metot içinde olduğundan sadece metodu değiştirirsiniz. ;)
C# SQL Connection Class Hazırlamak
Gördüğünüz gibi arkadaşlar. Kodlarımı ne kadar da kısalttık. Aslında buradaki en önemli nokta kodları kısaltmak değil, kodları sadeleştirmek ve kullanım kolaylığı sağlamaktır. İki form arasındaki farklı kıyaslayarak bu sonuca sizde ulaşabilirsiniz. Karma karışık bir formdan sade ve ne bir forma geçiş yaptık.
- Kodların okunması daha rahat
- Basitçe olsa da olması gereken insert, update veya listeleme formlarının çok kısa sürede yapılabilmesi.
- Bir değişiklik yapılması gerektiğinde çok hızlı müdahele edebilmek
Bize ne kadar fayda sağladığını görebilirsiniz.
Yukarıdaki işlemler için hazırladığım videoyu aşağıda görebilirsiniz.
C# SQL Connection Class Hazırlamak [Video Destekli] yazımda bu kadar arkadaşlar. Umarım C# sql bağlantı konusunu artık bir class olarak kullanmaya başlarsınız ve daha hızlı projeler üretirsiniz. Diğer yazılarımızda görüşmek üzere….
Bana destek olmak isterseniz, iletişim sayfamda verdiğim sosyal medya hesaplarımı takip edebilirsiniz.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız. Derslerime özel olarak hazırladığım Github Projeme bu bağlantıdan ulaşabilirsiniz…
Bu yazı, sitemdeki 427. yazıdır…
Sağlıcakla ve takipte kalın. ;)
Merhaba,
Öncelikle çok güzel anlatmışsınız fakat ben bu konulara yeni başladığım için biraz zorlanıyorum. Aynı örneği bir de datagridview için yazabilir misiniz lütfen ?
Merhaba,
Başlangıçta zorlanmanız tabiki normaldir.
Ama zaten yazıda verileri datagridview’de gösterme konusunda örnek var. griddoldur(); adlı metot bu işi yapıyor.
Emeğine sağlık güzel anlatmışsın. Size bu konuyla alakalı olarak bir sorum olacak. Web uygulama tarafında çok sorun yok ancak masaüstü uygulamalarda bu connection string nasıl güvenliği sağlanır? Ben uygulamamı paylaştıktan sonra devompile yaptım ve connection string imi görünce büyük bir hayal kırıklığı yaşadım.
Merhaba,
Exe’yi şifreleyerek bu dediğiniz sorunu çözebilirsiniz. https://dinamiknetwork.com/smart-assembly-exe-kodlari-sifreleme/ bu sitede benim bu konu hakkında yazdığım bir yazı var. İnceleyebilirsiniz.
Kolay gelsin.