Bu makele için Bilgehan YILDIZ' a teşekkürler
1-)Öncelikle bağlantı cümlesini tek merkezi bir yerde tutmalısın bu window uygulamaları için app.config ,web uygulamaları için web.configdir.Bunlar temelde bir nevi xml dosyası olup genelde uygulamarda tek bir merkezden okunması gereken değerler buralara konur
Örnek app.config dosyası burada connection stringimizi aşağıdaki gibi yazıyoruz.Daha sonra veri tabanımızın yolu vs değişirse sadece burdan değişiklik yapmamız yeterli oluyor.Bunuda projene eklemek için aşağıdaki adımları izlemelesin
Kod:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="TelefonRehberiConnectionString"
connectionString="Data Source=.;Initial Catalog=TelefonRehberi;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
Bunuda kodda kullanmak için aşağıdaki şekilde kod yazmamız lazım
Bunu yapmadan önce projemize referansAddSystem.Configuration dll eklememiz gerekmektedir
string baglantiyolu = ConfigurationManager.ConnectionStrings["TelefonRehberiConnectionString"].ConnectionString;
2-)connection string örnekleri
Connection stringde
Data Source makina adı,ip vs olabilir,. Dersen makinandaki local sql servera bağlanır
Initial CatalogBuraya database adını yazman gerekir
User IdDatabaselere genelde güvenlik için kullanıcılar açılır.Databasede hakkı olan kullanıcı
PasswordDatabase kullanıcısına ait şifre
Data Source=ServerAd;Initial Catalog=DbAd;User Id=KullanıcıAd;Password= 1234;
Bu şekilde bir bağlantı yapılırsa Integrated Security =True diye bu o database windows authenticate yani şifre vermeden bağlanabileceğini gösterir
Data Source=.;Initial Catalog=TelefonRehberi;Integrated Security=True
Alternatif bağlantı cümleleri için aşağıdaki adresi inceleyebilirsin
http://www.connectionstrings.com/3-)Veritabanına bağlanıp sonuçları bir küme içine almak için gereken kodlar
Sql serverla iş yapacaksan SqlConnection ,Access ile yapacaksan OleDbConnection gibi veritabanın değişirse kullancağın bu yapıları değiştirmelisin ancak mantıkları aynıdır.
Kod:
string baglantiyolu = ConfigurationManager.ConnectionStrings["TelefonRehberiConnectionString"].ConnectionString;
//Sql Connection bunun ile içine veritabanı yolunu vererek nereye bağlancağımızı belirtiyoruz
SqlConnection conn = new SqlConnection(baglantiyolu);
//Veritabanımızdan döncek kayıtları bir yere almam lazım ,datatable de verileri alabileceğim bir küme olarak düşün
DataTable dt = new DataTable();
//Select sorgusu atarak veritabanından istediğim alanları çekebilirim
string sorgu = "Select KisiID,Ad,Soyad from Kisi";
//Sqldataadapter ise kendisine verilen sorgu ve veritabanını kullanarak işlemleri gerçekliyeceğimiz sınıftır
SqlDataAdapter adap = new SqlDataAdapter(sorgu, conn);
//Fill metodu ile Datatable gibi dolmasını istediğimiz veri kümesinin içine datalarımızı atıyoruz
adap.Fill(dt);
//En sonda bu veri kümemizi grid gibi bir elemanın kaynağına atayarak gösterilmesi vs.. gibi işlemleri yapabiliriyoruz
dataGridView1.DataSource = dt;
4-)SqlCommand ise SqlAdapter gibidir ancak daha çok stored procedure,insert,update,delete gibi işlemlerde tercih edilir.Ancak Command ile işlem yapılırken database bağlantıyı senin açıp kapaman gerekir.
Kod:
conn.Open();Veritabanı bağlantısını açar
cmd.ExecuteNonQuery();Command nesnesini çalıştırmak için kullanılır
conn.Close();Veritabanı bağlantısını kapar
sqlparameter ise sorgularının parametre almasını istersen resimdeki değerleri formdan okuyup database kaydetmek istiyorsan önce
sorgunda @ ile belirttiğin kelimeler parametredir
Daha sonra bu parametreler değer ataman gerekir
Örnek parametre listesinin 0 ıncı elemanı @Ad parametresine denk geliyor değeri formdaki name alanı
paramlist[0]=new SqlParameter("@Ad", txtName.Text);
Bütün bunları yaptıktan sonra query çalıştırmadan önce bunların hepsini aşağıdaki gibi commandına eklemen lazım
cmd.Parameters.AddRange(paramlist);
Bütün bunları yaptıktan sonra command nesneni aşağıdaki gibi çalıştırdığında işlemi yapıyor
cmd.ExecuteNonQuery();
Kod:
bool Cinsiyet;
if(rdbBay.Checked)
Cinsiyet=true;
else
Cinsiyet=false;
string baglantiyolu = ConfigurationManager.ConnectionStrings["TelefonRehberiConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(baglantiyolu);
string sorgukisiekle = "Insert Into Kisi(Ad,Soyad,Cinsiyet,Yas,TcKimlik) values(@Ad,@Soyad,@Cinsiyet,@Yas,@TcKimlik)";
SqlParameter[] paramlist = new SqlParameter[5];
paramlist[0]=new SqlParameter("@Ad", txtName.Text);
paramlist[1] = new SqlParameter("@Soyad", txtSoyad.Text);
paramlist[2] = new SqlParameter("@Cinsiyet", Cinsiyet);
paramlist[3] = new SqlParameter("@Yas", nudYas.Value);
paramlist[4] = new SqlParameter("@TcKimlik", txtTcKimlik.Text);
SqlCommand cmd = new SqlCommand(sorgukisiekle, conn);
cmd.Parameters.AddRange(paramlist);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
5-)SqlParametrelerini kullanmanın farklı yöntemleri var örnek olarak yukarıda benim yaptığım bir parametre listesi oluşturmaktı ancak parametreleri şu şekilde de ekleyebilirdim
Aşağıdaki gibi parametreleri tek tek ekleyebilirsin mesela farklı algoritmalarda işine yarar
SqlParameter param=new SqlParameter("@Ad", txtName.Text);
cmd.Parameters.Add(param);
6-)Aşağıdaki şekilde hiç parametre kullanmadan da işlem yapılabilir ancak bunu kesinlikle yapma ,sql injection hatalarına vs neden olabilir.ve kod okunabilirliğini azalır
string sorgukisiekle = "Insert Into Kisi(Ad,Soyad,Cinsiyet,Yas,TcKimlik) values(@Ad="+txtName.Text+",@Soyad="+txtSoyad.Text...