Bu yazımızda Windows Form ile Login Form yani kullanıcı girişi uygulamasını daha önceki örneğimizden farklı olarak Class yapısı kullanarak gerçekleştireceğiz. Aynı zamanda Kullanıcı Ekleme işlemini de gerçekleştireceğiz. Veritabanında aynı isimde bir kullanıcının daha önce olup olmadığının kontrolünü de gerçekleştirerek Form2‘ nin açılmasını sağlayacağız.
Projemize geçelim. Öncelikle projemizde kullanacağımız veritabanına bakalım.
Veritabanı olarak SQL Server’ da “DayBook” isimli veri tabanını ve “Users” isimli tabloyu kullanacağız. Deneme amaçlı olarak tablomuza birkaç kayıt girelim.
Şimdide Form1 ve Form2 tasarımlarını yapacağız.
Form1 yani Kullanıcı girişi için kullanacağımız Form aşağıdaki gibi olacak;
Form2 ise deneme amaçlı olarak kullanılacağından basit bir şekilde tasarlıyorum. Buradaki amaç Login Form’ umuzun düzgün çalışıp çalışmadığını gözlemlemek olacak.
Projemizde kullanacağımız Class‘ ları oluşturmaya başlayalım. Örneğimizde 3 adet Class kullanacağız.
Bunlar “Database.cs”, “User.cs”, ve “UserProvider.cs” olacak şimdi sırasıyla sınıflarımızı oluşturarak açıklayalım.
Database.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; namespace loginFormClass { class Database { public static SqlConnection GetConnection() { string connectionString = @"Data Source=.;Initial Catalog=DayBook;Integrated Security=True"; return new SqlConnection(connectionString); } } } |
Bu class veritabanı bağlantısını içeren ConnectionString cümlesiniiçermekte.
User.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace loginFormClass { public class User { int _id; public int Id { get { return _id; } set { _id = value; } } string _name; public string Name { get { return _name; } set { _name = value; } } string _password; public string Password { get { return _password; } set { _password = value; } } } } |
Bu class’ ta ise Veritabanı alanlarına uygun bir şekilde kullanıcı için tanımlamaları gerçekleştiriyoruz.
UserProvider.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; namespace loginFormClass { public class UserProvider { public User getUser(string name, string password) { User user = null; using (var connection = Database.GetConnection()) { var command = new SqlCommand("SELECT *FROM Users WHERE Name='" + name + "' and Password='" + password + "'"); command.Connection = connection; connection.Open(); using (var reader = command.ExecuteReader()) { while (reader.Read()) { user = new User(); user.Id = reader.GetInt32(0); //id user.Name = reader.GetString(1); //name user.Password = reader.GetString(2); //password } } connection.Close(); } return user; } private bool ContainsUser(User user) { bool result = false; using (var connection = Database.GetConnection()) { var command = new SqlCommand("SELECT *FROM Users WHERE Name='" + user.Name + "'"); //var command = new SqlCommand("SELECT *FROM Users WHERE Name='" + user.Name + "' and Password='" + user.Password + "'"); command.Connection = connection; connection.Open(); using (var reader = command.ExecuteReader()) { if (reader.Read()) { result = true; } } connection.Close(); } return result; } public bool InsertUser(User user) { bool result = false; if (!ContainsUser(user)) { using (var connection = Database.GetConnection()) { var command = new SqlCommand("INSERT INTO Users(Name,Password) VALUES('" + user.Name + "','" + user.Password + "')"); command.Connection = connection; connection.Open(); if (command.ExecuteNonQuery() != -1) { result = true; } connection.Close(); } } return result; } } } |
Bu class Kullanıcı adı şifre kontrolünün yapıldığı getUser, kullanıcı adının daha önceden kayıtlı olup olmadığının kontrolünü sağlayan ContainsUser ve Yeni kullanıcı eklenmesini sağlayan InsertUser metotlarını barındırmakta. Burada InsertUser metodunu incelediğimizde öncelikli olarak ContainUser metoduyla kullanıcı isminin daha önceden kayıtlı olup olmadığının kontrolünün yapıldığını görmekteyiz.
Class’larımızı oluşturduktan sonra Login Form olarak kullanacağımız Form1 için kodlarımıza geçelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace loginFormClass { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public User user; public UserProvider islem; private void button2_Click(object sender, EventArgs e) { islem = new UserProvider(); user = islem.getUser(txtName.Text, txtPass.Text); if (user != null) { Form2 f2 = new Form2(); f2.Show(); } else { MessageBox.Show("Kullanıcı Adı ya da şifre Yanlış!"); } } private void button1_Click(object sender, EventArgs e) { islem = new UserProvider(); user = new User(); user.Name = txtName.Text; user.Password = txtPass.Text; if(islem.InsertUser(user)) { MessageBox.Show("Kullanıcı Eklendi"); } else { MessageBox.Show("Bu Kullanıcı adı var!"); } } } } |
Giriş butonu için kodlarımızı incelediğimizde UserProvider sınıfından bir nesne oluşturulduğunu ve getUser metoduna kullanıcı adı ve şifrenin parametre olarak gönderildiğini görüyoruz. Eğer geriye bir kullanıcı dönüyorsa Form2′ nin açılmasını sağlıyoruz.
Aksi takdirde gerekli uyarı mesajını veriyoruz.
Kullanıcı Ekle butonu ise yine UserProvider sınıfında InsertUser metoduna parametre olarak user türünden kullanıcı göndermekte. Bu sınıfta gerekli olan kullanıcının var olup olmadığının kontrolü yapılmakta ve eğer yoksa kullanıcının kaydedilmesi sağlanmakta.
Eğer kullanıcı adı veritabanında var ise aşağıdaki şekilde bir uyarı mesajı ile karşılaşılacaktır.
studio2019 kullanıyorum nuget ile hangi ek paketleri indirmemiz gerekiyor? mesela System.Data.SqlClient bu paket gibi?
abi bunun indirme linkini koyarsanız sevinirim
Merhabalar. Kodların bi kısmını projemde kullandım. Lakin userprovider sınıfının ilk kısmında InvalidOperationException hatası alıyorum nasıl. Sanırım database’e bağlanmıyor. Nasıl düzeltebilirim acaba? Acil dönüş yaparsanız çok memnun olurum.
Merhaba bu class ları nasıl oluşturabilirim bendeki c# türkçe versiyon bulmadım bir türlü
Sizden Bir şey Rica Edebilir miyim? Benim İçin Çok Önemlide!?
Problem nedir?
Paylaşım için teşekürler yardımcı oldu