15 tháng 3, 2016

Xây Dựng Hàm Dùng Chung Để Kết Nối CSDL C#

1. Xây Dựng Hàm Dùng Chung Để Kết Nối CSDL

- Vào C# Xây Dựng Class Dataprovider.cs
 public partial class Dataprovider : DataTable
    {
       // Khai báo tham số
        private static SqlConnection conn = null;
        private static string str_conn = "";
        private SqlCommand _cmd;
        // Hàm trả về đối tượng lệnh
        public SqlCommand Cmd
        {
            get { return _cmd; }
            set { _cmd = value; }
        }
        SqlDataAdapter _adapter;
        // Hàm dựng không đối số
        public Dataprovider()
        {
            config_xml.docfile_xml();
            str_conn = config_xml._str_conn;
            open_cnn();
        }
        // Hàm mở kết nối đến hệ thống
        public static bool open_cnn()
        {
            try
            {
                conn = new SqlConnection(str_conn);
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }
                return true;
            }
            catch (Exception ex)
            {
                throw ex;
                return false;
            }
        }
        // Hàm để lấy danh sách dữ liệu
        public DatatableLoad(SqlCommand cmd)
        {
            _cmd = cmd;
            try
            {
                open_cnn();
                _cmd.Connection = conn;
                _adapter = new SqlDataAdapter();
                _adapter.SelectCommand = _cmd;

                this.Clear();
                _adapter.Fill(this);
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }
        //Hàm đóng kết nối
        public void CloseConn()
        {
            conn.Close();
            SqlConnection.ClearPool(conn);
            conn.Dispose();

        }
        // Hàm thực thi câu lệnh insert, update
        public int ExecuteNoneQuery()
        {
            int kq = 0;
            SqlTransaction sqltr = null;
            try
            {
                sqltr = conn.BeginTransaction();//bat dau qua trinh quan ly transaction
                _cmd.Connection = conn;
                _cmd.Transaction = sqltr; //gan transaction vao doi tuong cmd

                _adapter = new SqlDataAdapter();
                _adapter.SelectCommand = _cmd;

                SqlCommandBuilder builder = new SqlCommandBuilder(_adapter);
                kq = _adapter.Update(this);

                sqltr.Commit();//cam ket thuc hien thanh cong
            }
            catch (Exception)
            {
                if (sqltr != null)
                    sqltr.Rollback();//quay lui
            }
            return kq;
        }
        //Hàm thực thi câu lệnh insert,update
        public int ExecuteNonQuery(SqlCommand cmd)
        {
            int kq = 0;
            SqlTransaction sqltr = null;
            try
            {
                sqltr = conn.BeginTransaction();
                cmd.Connection = conn;
                cmd.Transaction = sqltr;

                kq = cmd.ExecuteNonQuery();
                this.AcceptChanges();

                sqltr.Commit();
            }
            catch (Exception ex)
            {

                if (sqltr != null)
                    sqltr.Rollback();
                throw ex;
            }
            return kq;

        }
        // Hàm trả về biến
        public object ExecuteScalar(SqlCommand cmd)
        {
            object kq = null;
            SqlTransaction sqltr = null;
            try
            {
                sqltr = conn.BeginTransaction();//bat dau quan ly transaction
                cmd.Connection = conn;
                cmd.Transaction = sqltr;
                kq = cmd.ExecuteScalar();
                { }
                this.AcceptChanges();
                sqltr.Commit();
                if (kq == DBNull.Value)
                    kq = null;
            }
            catch (Exception ex)
            {
                if (sqltr != null)
                    sqltr.Rollback();
                throw ex;
            }
            return kq;
        }
        //ham chen vao csdl
        public bool insert(SqlCommand cmd)
        {
            if (conn == null || conn.State == ConnectionState.Closed)
            {
                conn = new SqlConnection();
                conn.Open();
            }

            _cmd = cmd;

            _cmd.Connection = conn;
            try
            {
                _cmd.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                return false;
                throw ex;
            }
            return true;

        }
        //ham update 
        public void update()
        {
            SqlCommandBuilder builder = new SqlCommandBuilder(_adapter);
            _adapter.Update(this);
        }
        //ham ket attach csdl 
        //HAM LAY MA ID ke tiep
        public SqlDataReader ExeCutereader(SqlCommand cmd)
        {
            SqlDataReader reader = null;
            if (conn == null || conn.State == ConnectionState.Closed)
            {
                conn = new SqlConnection();
                conn.Open();
            }

            _cmd = cmd;

            _cmd.Connection = conn;
            try
            {
                reader = _cmd.ExecuteReader();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            //reader.Close();
            //reader.Dispose();
            //_cmd.Dispose();
            return reader;
        }
    }