C# Sql Sorgusu Yazmayalım
Evet, Doğru Okudunuz Konunun Adı SQL SORGULARI YAZMAYALIM
Sql Sorguları Ile Boşuna Yorulmamak Için Entity Framework (EF) Kullanacağız.
Kullanacağımız yapı T4 Template ile kendi kodunu kendi yazar ve her bir açılan program için sadece 1 instance alır ve sadece 1 connection açar. Connection Pool'u doldurmaz. Ayrıca Raw SQL ile aynı hızda çalışır (SQL Tabanında aynı hızda çalışır C# tabanında daha yavaş). Belirttiğiniz lamda expression'lar ile sorguyu oluşturur ve raw sql gibi çalıştırır. SQL Injection da yemez. Yani sistem yavaş veya tehlikeli değil. Sadece belirtmek istedim.
Öncelikle Bir SQL Veritabanı Oluşturalım Şimdilik Sadece Kullanıcı Adı-Şifre Yapacağım.
Tablonun Bir Şeması :
ID int
Created Datetime getdate()
Modified Datetime getdate()
Username varchar(50)
Password varchar(50)
Mail varchar(50) Allow Nulls
IsActive bit
Ekran Görüntüsü:

Şimdi Visual Studio 'ya Geçelim
Öncelikle bir proje oluşturuyoruz:

Giriş Formumuzun Tasarımını Yapalım:

Şimdi Entity Framework'ü Projemize Ekleyelim:

Adım Adım Devam Ediyoruz:

Yüklemeyi Onaylıyoruz:

Finished Yazısı Çıkınca Yükleme Tamamlanır:

Şimdi Entity Framework ile SQL 'e bağlanalım:

Next Diyip Devam Ediyoruz:

Buradan Database Connection Diyip Databasei Seçiyoruz:

Sql Server'i Seçip Devam Ediyoruz:

Sırasıyla Databse'imizi Seçiyoruz:

Next diyip devam ediyoruz:

Kullanmak Istediğimiz Tabloları Seçip Plurelaize Tikini İşaretliyoruz:

Gelen Bu Uyarıyo Ok Diyoruz:

Bu Ekran Gelirse Doğru Yapmışız Demektir:

Bağlantımızı Sağlamak Için Bu Şekilde (Kod yapısı Önemli Aynı Olmalı):

Ayrıca Şifrelerimizi Hash'leyip kaydetmek Için Hash Class'ı Oluşturacağız, Bunun Için Extension Class Oluşturalım:

Giriş Formumuzda Butona Tıklanınca Olacaklar:

Şimdi burada:
Anaform'umuzu oluşturalım:


Anaform 'umuz açılınca bize bu listview i dolduracak komut u yazalım:

Kaldır Diyince Aynı Şekilde .remove diyince database'den kaldırıyor. Save changes dersekde kaydediyor:

Ekleme ve Düzenleme Formunu açalım:

Form'un Tasarımı:

Form'un Kodları:

Kaynak Kodları: https://yadi.sk/d/P6yLb3Ov3MBU3i
Stajer Klubü
Sql Sorguları Ile Boşuna Yorulmamak Için Entity Framework (EF) Kullanacağız.
Kullanacağımız yapı T4 Template ile kendi kodunu kendi yazar ve her bir açılan program için sadece 1 instance alır ve sadece 1 connection açar. Connection Pool'u doldurmaz. Ayrıca Raw SQL ile aynı hızda çalışır (SQL Tabanında aynı hızda çalışır C# tabanında daha yavaş). Belirttiğiniz lamda expression'lar ile sorguyu oluşturur ve raw sql gibi çalıştırır. SQL Injection da yemez. Yani sistem yavaş veya tehlikeli değil. Sadece belirtmek istedim.
Öncelikle Bir SQL Veritabanı Oluşturalım Şimdilik Sadece Kullanıcı Adı-Şifre Yapacağım.
Tablonun Bir Şeması :
ID int
Created Datetime getdate()
Modified Datetime getdate()
Username varchar(50)
Password varchar(50)
Mail varchar(50) Allow Nulls
IsActive bit
Ekran Görüntüsü:

Şimdi Visual Studio 'ya Geçelim
Öncelikle bir proje oluşturuyoruz:

Giriş Formumuzun Tasarımını Yapalım:

Şimdi Entity Framework'ü Projemize Ekleyelim:

Adım Adım Devam Ediyoruz:

Yüklemeyi Onaylıyoruz:

Finished Yazısı Çıkınca Yükleme Tamamlanır:

Şimdi Entity Framework ile SQL 'e bağlanalım:

Next Diyip Devam Ediyoruz:

Buradan Database Connection Diyip Databasei Seçiyoruz:

Sql Server'i Seçip Devam Ediyoruz:

Sırasıyla Databse'imizi Seçiyoruz:

Next diyip devam ediyoruz:

Kullanmak Istediğimiz Tabloları Seçip Plurelaize Tikini İşaretliyoruz:

Gelen Bu Uyarıyo Ok Diyoruz:

Bu Ekran Gelirse Doğru Yapmışız Demektir:

Bağlantımızı Sağlamak Için Bu Şekilde (Kod yapısı Önemli Aynı Olmalı):

Ayrıca Şifrelerimizi Hash'leyip kaydetmek Için Hash Class'ı Oluşturacağız, Bunun Için Extension Class Oluşturalım:

Giriş Formumuzda Butona Tıklanınca Olacaklar:

Şimdi burada:
Kod:
var password = txtPassword.Text.Sha256(); // Şifreyi hash liyoruz
var users = Singleton.context.Users.Where(i => i.IsActive && i.Username == txtUsername.Text && i.Password == password);
//Bu şekilde yazarak database ulaşabiliriz. Users da tablomuz Where dedikten sonra yazdığımız bu şeyleri karşılayan kullanıcı varsa buraya gelir bu aslında if ile aynı if (Username == txtUsername.Text && Password == password) yazmak yerine where yazıyoruz
if (!users.Any()) // Eğer yazdıklarımızı Karşılayan Bir Kullanıcı varsa giriş yapar.
{
MessageBox.Show("Wrong password !");
return;
}
MessageBox.Show("Welcome !");
new frmMain().Show();
Hide();
Anaform'umuzu oluşturalım:


Anaform 'umuz açılınca bize bu listview i dolduracak komut u yazalım:

Kaldır Diyince Aynı Şekilde .remove diyince database'den kaldırıyor. Save changes dersekde kaydediyor:

Ekleme ve Düzenleme Formunu açalım:

Form'un Tasarımı:

Form'un Kodları:

Kod:
public frmUserControl(User user)
{
InitializeComponent();
txtUsername.Text = user.Username;
txtPassword.Text = "[Hash]";
txtPassword.Text = user.Mail;
cbIsActive.Checked = user.IsActive;
btnDone.Text = "Change";
_user = user;
}
private **** btnDone_Click(object sender, EventArgs e)
{
if (btnDone.Text == "Change")
{
_user.Username = txtUsername.Text;
if (txtPassword.Text != "[Hash]")
_user.Password = txtPassword.Text.Sha256();
_user.Mail = txtMail.Text;
_user.IsActive = cbIsActive.Checked;
}
else
{
_user = new User() {
Username = txtUsername.Text,
Password = txtPassword.Text.Sha256(),
Mail = txtPassword.Text,
IsActive = cbIsActive.Checked,
};
Singleton.context.Users.Add(_user);
}
Singleton.context.SaveChanges();
}
Kaynak Kodları: https://yadi.sk/d/P6yLb3Ov3MBU3i
Stajer Klubü
Son düzenleme:




