Yerini Entity Framework’e bıraksa da küçük çaplı projelerde halen severek kullanmaya devam ettiğim veri erişim sağlayıcısıdır kendileri..
Bir gün Ado.Net ile yazılım geliştirirken Insert, Update ve Delete işlemleri için her seferinde sql sorgusu yazmanın ve bu sorgulara tek tek AddWithValue işlemi yaparak parametre göndermenin benim için aslında ne kadar çok zaman kaybettirdiğini fark ettim ve bu süreyi kısaltmanın çözümlerini aradım. Ayrıca yazdığım Sql sorgularında da dikkatsizlik nedeniyle yazım hataları olabiliyordu.
Çözüm olarak Insert, Update ve Delete işlemleri için üç farklı method geliştirdim. Bu methodlar hem parametre ile gönderim yaparak hız ve güvenli sağlayacak hem de sql sorgularını kendi oluşturarak hata yapma olasılığını sıfırlayacaktı.
Öncelikle methodlarım için bir Functions.cs class’ı oluşturuyorum, siz adını farklı verebilirsiniz. Bu class altındaki yazdığım methodlar dışarıdan gelecek parametrelere göre sql oluşturup, işlemleri yapacaklar. Sql’in neye göre oluşacağını ve gelecek verilerin değerlerini alabilmek için parametre kullanacağım. Bunun için aynı class içerisine aşağıdaki struct‘ı oluşturuyorum.
Not: Struct yerine class kullanırsanız kullanım esnasında newlemeniz gerekecektir, yoksa null hatası döndürecektir. Bu nedenle struct oluşturuyorum.
[csharp]public struct Parameters
{
public string name;
public object value;
}
Not: Ben MySQL’e göre yazdım, MySql yazan yerleri Sql olarak değiştirirseniz MicrosoftSQL ile tam uyumlu çalışacaktır. this.Connect() methodunu yazmadım ancak bu method aktif (state open) bir MySQLConnection döndürmektedir.
Methodlara gelirsek;
Insert İşlemleri için InsertSQL Methodu
[csharp]public int InsertSQL(string pTableName, Parameters[] prm){
string sqlQuery = "INSERT INTO " + pTableName + " (";
MySqlConnection connection = this.Connect();
for (int i = 0; i < prm.Length; i++)
{
sqlQuery += prm[i].name;
if (i != prm.Length – 1)
sqlQuery += ",";
}
sqlQuery += ") VALUES (";
for (int i = 0; i < prm.Length; i++)
{
sqlQuery += "@" + prm[i].name;
if (i != prm.Length – 1)
sqlQuery += ",";
}
sqlQuery += ")";
MySqlCommand query = new MySqlCommand(sqlQuery, connection);
for (int i = 0; i < prm.Length; i++)
{
query.Parameters.AddWithValue(prm[i].name, prm[i].value);
}
int result = 0;
try
{
result = query.ExecuteNonQuery();
}
catch (MySqlException ex)
{
throw new Exception(ex.Message + " (" + sqlQuery + ")");
}
connection.Close();
connection.Dispose();
query.Dispose();
return result;
}[/csharp]
Update İşlemleri için UpdateSQL Methodu
[csharp]public int UpdateSQL(string pTableName, Parameters[] prm, string whereColumnName, int whereColumnIDValue)
{
string sqlQuery = "UPDATE " + pTableName + " SET ";
MySqlConnection connection = this.Connect();
for (int i = 0; i < prm.Length; i++)
{
sqlQuery += prm[i].name + " = @" + prm[i].name;
if (i != prm.Length – 1)
sqlQuery += ",";
}
sqlQuery += " WHERE " + whereColumnName + " = " + whereColumnIDValue;
MySqlCommand query = new MySqlCommand(sqlQuery, connection);
for (int i = 0; i < prm.Length; i++)
{
query.Parameters.AddWithValue(prm[i].name, prm[i].value);
}
int result = 0;
try
{
result = query.ExecuteNonQuery();
}
catch (MySqlException ex)
{
throw new Exception(ex.Message + " (" + sqlQuery + ")");
}
connection.Close();
connection.Dispose();
query.Dispose();
return result;
}
Delete İşlemleri için DeleteSQL Methodu
[csharp]public int DeleteSQL(string pTableName, string whereColumnName, int whereColumnIDValue){
string sqlQuery = "DELETE FROM " + pTableName + " WHERE " + whereColumnName + " = " + whereColumnIDValue;
MySqlConnection connection = this.Connect();
MySqlCommand query = new MySqlCommand(sqlQuery, connection);
int result = 0;
try
{
result = query.ExecuteNonQuery();
}
catch (MySqlException ex)
{
throw new Exception(ex.Message + " (" + sqlQuery + ")");
}
connection.Close();
connection.Dispose();
query.Dispose();
return result;
}[/csharp]
Insert İşlemi Kullanımı:
Örnek olarak sayfalar tablomda bulunan sayfaadi ve icerik kolonlarına textboxlardan gelen verileri ekleyeceğim.
[csharp]// Functions classımı oluşturuyorum.
Functions fn = new Functions();
// Parametrelerimi oluşturuyorum.
Functions.Parameters[] prm = new Functions.Parameters[2];
prm[0].name = "sayfaadi";
prm[0].value = txtSayfaAdi.Text;
prm[1].name = "icerik";
prm[1].value = txtIcerik.Text
// Parametleri ekledikten sonra InsertSQL methodumu çalıştırıyorum.
fn.InsertSQL("sayfalar", prm);
Update İşlemi Kullanımı:
Örnek olarak sayfalar tablomda bulunan id si 4 olan sayfanın sayfaadi ve icerik kolonlarını textboxlardan gelen verilerle güncelleyeceğim.
[csharp]// Functions classımı oluşturuyorum.
Functions fn = new Functions();
// Parametrelerimi oluşturuyorum.
Functions.Parameters[] prm = new Functions.Parameters[2];
prm[0].name = "sayfaadi";
prm[0].value = txtSayfaAdi.Text;
prm[1].name = "icerik";
prm[1].value = txtIcerik.Text
// Parametleri ekledikten sonra UpdateSQL methodumu çalıştırıyorum.
// Sayfanın ID değeri olan 4’ü elle gönderdim, siz dinamikleştirebilirsiniz.
fn.UpdateSQL("sayfalar", prm, "id", 4);
Delete İşlemi Kullanımı:
Örnek olarak sayfalar tablomda bulunan id si 5 olan sayfayı sileceğim.
[csharp]// Functions classımı oluşturuyorum.
Functions fn = new Functions();
// Sayfanın ID değeri olan 5’i elle gönderdim, siz dinamikleştirebilirsiniz.
fn.DeleteSQL("sayfalar", "id", 5);
[/csharp]