Tanım vs. gibi detaylara girmeden doğrudan konuya gireceğim. Her ne kadar artık ORM(Object Relational Mapping) araçlarını kullansak da küçük çaplı projelerde Entity Framework vs gibi ORM araçları olmadan basit ve hızlı bir şekilde veritabanı işlerimizi halletmek isteriz. Çok uzun zaman kullanmayınca da söz dizimini(syntax) hatırlamakta zorlanabiliriz. Bu vesile ile elimizin altında bulunması için burada işin DAL(Data Accees Layer) kısmı paylaşmak istedim. Örnek projenin tamamına buradanerişilebilir.
Öncelikle eTrade diye bir veritabanı oluşturup bukodları SSMS‘te çalıştırıyoruz. Product diye bir tablomuz ve içerisinde de örnek olarak üç adet verimiz oluşacak. Daha sonra oluşturulan örnek projede ProductDAL adında bir class oluşturuyoruz.
Bağlantı Oluşturma
//_connetion'ın başına _ koyduk global olduğunu ya da dışarıda olduğunu belirtmek için.
SqlConnection _connection = new SqlConnection("Server=.;Database=eTrade;Trusted_Connection=True;");
Bağlantımızın açık/kapalı durumunu her yerde yazmamak için metot olarak kontrol ediyoruz ve ihtiyacımız olduğunda bu metodu kullanıyoruz.
Bağlantı Durumunu Kontrol etme
public void ConnetionControl()
{
if (_connection.State == ConnectionState.Closed) //Önce kontrol ediyoruz. Eğer açıksa tekrar açmak sıkıntı yaratabilir.
{
_connection.Open();
}
}
Listeleme İşlemi
public List<Product> GetAll()
{
ConnetionControl();
SqlCommand command = new SqlCommand("Select * from Products", _connection);
SqlDataReader reader = command.ExecuteReader();//SQL'de F5'e basmak ile aynı. Dönderdiği değer ise SqlDataReader'tipinde.
List<Product> products = new List<Product>();
while (reader.Read())
{
Product product = new Product()
{
Id = Convert.ToInt32(reader["Id"]),
Name = reader["Name"].ToString(),
StockAmount = Convert.ToInt32(reader["StockAmount"]),
UnitPrice = Convert.ToInt32(reader["UnitPrice"])
};
products.Add(product);
}
reader.Close();
_connection.Close();
return products;
}
Ekleme İşlemi
public void Add(Product product)
{
ConnetionControl();
SqlCommand command = new SqlCommand("Insert into Products Values(@name,@unitPrice,@stockAmount)", _connection);
command.Parameters.AddWithValue("@name", product.Name);
command.Parameters.AddWithValue("@unitPrice", product.UnitPrice);
command.Parameters.AddWithValue("@stockAmount", product.StockAmount);
command.ExecuteNonQuery(); //Çalıştırır ve etkilenen kayıt sayısını döndürür.
_connection.Close();
}
Güncelleme İşlemi
public void Update(Product product)
{
ConnetionControl();
SqlCommand command = new SqlCommand("UPDATE Products SET Name=@name, UnitPrice=@unitPrice, StockAmount=@stockAmount WHERE Id=@Id", _connection);
command.Parameters.AddWithValue("@name", product.Name);
command.Parameters.AddWithValue("@unitPrice", product.UnitPrice);
command.Parameters.AddWithValue("@stockAmount", product.StockAmount);
command.Parameters.AddWithValue("@Id", product.Id);
command.ExecuteNonQuery(); //Çalıştırır ve etkilenen kayıt sayısını döndürür.
_connection.Close();
}
Silme İşlemi
public void Delete(int id)
{
ConnetionControl();
SqlCommand command = new SqlCommand("Delete From Products WHERE Id = @Id", _connection);
command.Parameters.AddWithValue("@Id", id);
command.ExecuteNonQuery(); //Çalıştırır ve etkilenen kayıt sayısını döndürür.
_connection.Close();
}
Store Procedure ile Listeleme İşlemi
public List<Product> GetAll_SP()
{
ConnetionControl();
SqlCommand command = new SqlCommand("SP_ListProduct", _connection);
command.CommandType = CommandType.StoredProcedure;
SqlDataReader reader = command.ExecuteReader();//SQL'de F5'e basmak ile aynı. Dönderdiği değer ise SqlDataReader'tipinde.
List<Product> products = new List<Product>();
while (reader.Read())
{
Product product = new Product()
{
Id = Convert.ToInt32(reader["Id"]),
Name = reader["Name"].ToString(),
StockAmount = Convert.ToInt32(reader["StockAmount"]),
UnitPrice = Convert.ToInt32(reader["UnitPrice"])
};
products.Add(product);
}
reader.Close();
_connection.Close();
return products;
} //Listeleme için örnek
Store Procedure ile ekleme işlemi
public void Add_SP(Product product) // Ekleme / Düzelme / Silme için örnek.
{
ConnetionControl();
SqlCommand command = new SqlCommand("SP_AddProduct", _connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@name", product.Name);
command.Parameters.AddWithValue("@unitPrice", product.UnitPrice);
command.Parameters.AddWithValue("@stockAmount", product.StockAmount);
command.ExecuteNonQuery(); //Çalıştırır ve etkilenen kayıt sayısını döndürür.
_connection.Close();
}
Top comments (0)