HelperDB Sınıfım

LINQ'tan önce projelerimde kullandığım HelperDB sınıfımın kodlarını sizinle paylaşmak istiyorum.

Katmanlı mimari ile hazırladığımız projelerin vazgeçilmezlerinden birisi de projemizin DAL katmanına HelperDB sınıfı eklemektir. Bu sınıfta DB işlemlerini otomatik hale getiren metotlar bulunur.

Benim projelerimde kullandığım HelperDB sınıfında şu metotlar bulunuyor:

public int ExecuteNonQuery(string cmdText, params MySqlParameter[] param)
public int ExecuteNonQuery(out long SonId, string cmdText, params MySqlParameter[] param)
public MySqlDataReader ExecuteReader(string cmdText, params MySqlParameter[] param)
public DataSet ExecuteDataSet(string cmdText, params MySqlParameter[] param)
public DataRow ExecuteDataRow(string cmdText, params MySqlParameter[] param)
public object ExecuteScalar(string cmdText, params MySqlParameter[] param)

Şimdi bu sınıfı kullanarak veritabanı işlemlerini nasıl yapabileceğimize örnekler göstermek istiyorum.

DAL katmanımda LinklerDB adında bir sınıfım var. Bu sınıf, helperDB yi kullanarak DB işlemlerini gerçekleştiriyor.

İşte LinklerDB sınıfım:

public class LinklerDB
{
    HelperDB helper = new HelperDB();

    public DataTable LinkleriGetir()
    {
        string sql = "select * from linkler where Anasayfa order by Oncelik";
        return helper.ExecuteDataSet(sql).Tables[0];
    }

    public DataTable LinkleriGetir(int adet)
    {
        string sql = "select * from linkler order by Oncelik limit 0," + adet;
        return helper.ExecuteDataSet(sql).Tables[0];
    }

    public void LinkSil(int id)
    {
        string sql = "delete from linkler where Id=?Id";
        MySqlParameter p = new MySqlParameter("?Id", MySqlDbType.Int32);
        p.Value = id;
        helper.ExecuteNonQuery(sql, p);
    }

    public LinkInfo LinkGetir(int id)
    {
        string sql = "select * from linkler where Id=?Id";
        MySqlParameter p = new MySqlParameter("?Id", MySqlDbType.Int32);
        p.Value = id;
        MySqlDataReader dr = helper.ExecuteReader(sql, p);
        LinkInfo info = new LinkInfo();
        if(dr.Read())
        {
            info.Baslik = Genel.GetString(dr, "Baslik");
            info.Id = Genel.GetInteger(dr, "Id");
            info.Link = Genel.GetString(dr, "Link");
            info.Oncelik = Genel.GetInteger(dr, "Oncelik");
            info.Yeni = Genel.GetBoolean(dr, "Yeni");
            info.Anasayfa = Genel.GetBoolean(dr, "Anasayfa");
        }
        dr.Close();
        return info;
    }

    public void LinkEkle(LinkInfo info)
    {
        string sql = @"insert into linkler (Baslik, Link, Oncelik, Yeni, Anasayfa)
                    values (?Baslik, ?Link, ?Oncelik, ?Yeni, ?Anasayfa)";
        MySqlParameter[] pars = new MySqlParameter[]
        {
            new MySqlParameter("?Id", MySqlDbType.Int32),
            new MySqlParameter("?Baslik", MySqlDbType.String),
            new MySqlParameter("?Link", MySqlDbType.String),
            new MySqlParameter("?Oncelik", MySqlDbType.Int32),
            new MySqlParameter("?Yeni", MySqlDbType.Bit),
            new MySqlParameter("?Anasayfa", MySqlDbType.Bit)
        };
        pars[0].Value = info.Id;
        pars[1].Value = info.Baslik;
        pars[2].Value = info.Link;
        pars[3].Value = info.Oncelik;
        pars[4].Value = info.Yeni;
        pars[5].Value = info.Anasayfa;
        helper.ExecuteNonQuery(sql, pars);
    }

    public void LinkDegistir(LinkInfo info)
    {
        string sql = @"update linkler set Baslik=?Baslik, Link=?Link, Oncelik=?Oncelik, Yeni=?Yeni, Anasayfa=?Anasayfa
                        where id=?Id";
        MySqlParameter[] pars = new MySqlParameter[]
        {
            new MySqlParameter("?Id", MySqlDbType.Int32),
            new MySqlParameter("?Baslik", MySqlDbType.String),
            new MySqlParameter("?Link", MySqlDbType.String),
            new MySqlParameter("?Oncelik", MySqlDbType.Int32),
            new MySqlParameter("?Yeni", MySqlDbType.Bit),
            new MySqlParameter("?Anasayfa", MySqlDbType.Bit)
        };
        pars[0].Value = info.Id;
        pars[1].Value = info.Baslik;
        pars[2].Value = info.Link;
        pars[3].Value = info.Oncelik;
        pars[4].Value = info.Yeni;
        pars[5].Value = info.Anasayfa;
        helper.ExecuteNonQuery(sql, pars);
    }
 
}

Bu da Genel.cs dosyam:

public class Genel
{
    public static string GetString(MySqlDataReader reader, String s)
    {
        if(reader.IsDBNull(reader.GetOrdinal(s)))
            return String.Empty;
        else
            return reader.GetString(reader.GetOrdinal(s));
    }

    public static DateTime GetDateTime(MySqlDataReader reader, String s)
    {
        if(reader.IsDBNull(reader.GetOrdinal(s)))
            return DateTime.MinValue;
        else
            return reader.GetDateTime(reader.GetOrdinal(s));
    }

    public static bool GetBoolean(MySqlDataReader reader, String s)
    {
        if (reader.IsDBNull(reader.GetOrdinal(s)))
            return false;
        else
            return reader.GetBoolean(reader.GetOrdinal(s));
    }

    public static bool GetBoolean(DataRow row, String s)
    {
        if (row.IsNull(s))
            return false;
        else
            return Convert.ToBoolean(row[s]);
    }

    public static int GetInteger(MySqlDataReader reader, String s)
    {
        if(reader.IsDBNull(reader.GetOrdinal(s)))
            return 0;
        else
            return reader.GetInt32(reader.GetOrdinal(s));
    }

    public static int GetTinyInteger(MySqlDataReader reader, String s)
    {
        if(reader.IsDBNull(reader.GetOrdinal(s)))
            return 0;
        else
            return reader.GetByte(reader.GetOrdinal(s));
    }

    public static String URLCevir(String s, params object[] pars)
    {
        for(int i = 0; i < pars.Length; i++)
        {
            pars[i] = URLCevir(pars[i].ToString());
        }
        s = String.Format(s, pars);
        return s;
    }

    public static String URLCevir(String s)
    {
        if (string.IsNullOrEmpty(s)) return "";
        if (s.Length > 80)
            s = s.Substring(0, 80);
        s = s.Replace("ş", "s");
        s = s.Replace("Ş", "S");
        s = s.Replace("ğ", "g");
        s = s.Replace("Ğ", "G");
        s = s.Replace("İ", "I");
        s = s.Replace("ı", "i");
        s = s.Replace("ç", "c");
        s = s.Replace("Ç", "C");
        s = s.Replace("ö", "o");
        s = s.Replace("Ö", "O");
        s = s.Replace("ü", "u");
        s = s.Replace("Ü", "U");
        s = s.Replace("'", "");
        s = s.Replace("\"", "");
        Regex r = new Regex("[^a-zA-Z0-9_-]");
        //if (r.IsMatch(s))
        s = r.Replace(s, "-");
        return s;
    }
}

Bu da HelperDB.cs sınıfım:

public class HelperDB
{
    public static readonly string connStr =
      ConfigurationManager.ConnectionStrings["connMySQL"].ToString();

    public int ExecuteNonQuery(string cmdText, params MySqlParameter[] param)
    {
        MySqlConnection conn = new MySqlConnection(connStr);
        MySqlCommand cmd = null;
        try
        {
            cmd = new MySqlCommand();
            cmd.Connection = conn;
            conn.Open();
            cmd.CommandText = cmdText;
            SqlCommandParam(cmd, param);

            return cmd.ExecuteNonQuery();
        }
        finally
        {
            if (conn.State != ConnectionState.Closed)
                conn.Close();
            cmd.Dispose();
            conn.Dispose();
        }
    }

    public int ExecuteNonQuery(out long SonId, string cmdText, params MySqlParameter[] param)
    {
        MySqlConnection conn = new MySqlConnection(connStr);
        MySqlCommand cmd = null;
        try
        {
            cmd = new MySqlCommand();
            cmd.Connection = conn;
            conn.Open();
            cmd.CommandText = cmdText;
            SqlCommandParam(cmd, param);

            int x = cmd.ExecuteNonQuery();
            SonId = cmd.LastInsertedId;
            return x;
        }
        finally
        {
            if (conn.State != ConnectionState.Closed)
                conn.Close();
            cmd.Dispose();
            conn.Dispose();
        }

    }

    public MySqlDataReader ExecuteReader(string cmdText, params MySqlParameter[] param)
    {
        MySqlConnection conn = new MySqlConnection(connStr);
        conn.StateChange += new StateChangeEventHandler(conn_StateChange);
        try
        {
            MySqlCommand cmd = new MySqlCommand(cmdText, conn);

            SqlCommandParam(cmd, param);
            conn.Open();
            return cmd.ExecuteReader(CommandBehavior.CloseConnection);

        }
        catch (Exception ex)
        {
            if (conn.State != ConnectionState.Closed)
                conn.Close();
            throw ex;
        }
    }

    void conn_StateChange(object sender, StateChangeEventArgs e)
    {
        if (e.CurrentState == ConnectionState.Closed)
        {
            MySqlConnection conn = sender as MySqlConnection;
            conn.Dispose();
        }
    }

    public DataSet ExecuteDataSet(string cmdText, params MySqlParameter[] param)
    {
        MySqlConnection conn = new MySqlConnection(connStr);
        MySqlCommand cmd = null;
        MySqlDataAdapter da = null;
        try
        {
            cmd = new MySqlCommand(cmdText, conn);
            da = new MySqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            SqlCommandParam(cmd, param);
            conn.Open();
            da.Fill(ds);
            return ds;
        }
        catch (Exception ex)
        {
            if (conn.State != ConnectionState.Closed)
                conn.Close();
            throw ex;
        }
        finally
        {
            if (conn.State != ConnectionState.Closed)
                conn.Close();
            da.Dispose();
            cmd.Dispose();
            conn.Dispose();
        }
    }

    public DataRow ExecuteDataRow(string cmdText, params MySqlParameter[] param)
    {
        MySqlConnection conn = new MySqlConnection(connStr);
        MySqlCommand cmd = null;
        MySqlDataAdapter da = null;
        try
        {
            cmd = new MySqlCommand(cmdText, conn);
            da = new MySqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            SqlCommandParam(cmd, param);
            conn.Open();
            da.Fill(ds);
            return ds.Tables[0].Rows[0];
        }
        catch (Exception ex)
        {
            if (conn.State != ConnectionState.Closed)
                conn.Close();
            throw ex;
        }
        finally
        {
            if (conn.State != ConnectionState.Closed)
                conn.Close();
            da.Dispose();
            cmd.Dispose();
            conn.Dispose();
        }
    }

    public object ExecuteScalar(string cmdText, params MySqlParameter[] param)
    {
        MySqlConnection conn = new MySqlConnection(connStr);
        MySqlCommand cmd = null;
        try
        {
            cmd = new MySqlCommand(cmdText, conn);
            SqlCommandParam(cmd, param);
            conn.Open();
            return cmd.ExecuteScalar();
        }
        finally
        {
            if (conn.State != ConnectionState.Closed)
                conn.Close();
            cmd.Dispose();
            conn.Dispose();
        }
    }

    private void SqlCommandParam(MySqlCommand cmd, params MySqlParameter[] param)
    {
        for (int i = 0; i < param.Length; i++)
        {
            cmd.Parameters.Add(param[i]);
        }
    }
}

ConnectionString bilgisinin web.config ten geldiğine dikkat ediniz.

Son olarak da bu sınıfları aspx dosyalarımızda nasıl kullanacağımıza örnek vereyim:

LinkInfo info = new LinkInfo();
info.Baslik = GenelIslemler.MetniTemizle(txtLinkBaslik.Text);
info.Id = id;
info.Link = GenelIslemler.MetniTemizle(txtLinkLink.Text);
info.Oncelik = Convert.ToInt32("0" + txtLinkOncelik.Text);
info.Yeni = cbYeni.Checked;
info.Anasayfa = cbAnasayfa.Checked;
LinklerDB linkDB = new LinklerDB();
linkDB.LinkEkle(info);

veya veri okuma için:

LinklerDB linkDB = new LinklerDB();
gvLink.DataSource = linkDB.LinkleriGetir();
gvLink.DataBind();

Umarım bu sınıflar yardımcı olmuştur.