.NET關於資料庫操作的類-囊括所有的操作

weixin_30924079發表於2020-04-04

   本人目前在實習,還沒有畢業,哈哈------還是一小弟。之前在學校中做了些小的專案,自己總結的關於資料庫操作的類,對於一些小的專案還是很有幫助的,現在一直在做silverlight的專案,目前連資料庫長什麼樣都沒有見過-----伺服器不是偶寫的,因為剛來也沒好意思問。

初來駕到,又如bug還請多多指教。

先貼程式碼吧。

using System.Data;
using System.Data.SqlClient;
namespace D.King.DB
{
    public class DBOperator
    {
        private string connStr;

        private SqlConnection conn;

        public delegate void getParams(SqlCommand comm);

        public delegate void getReader(IDataReader dataReader);
		
        public DBOperator()
        {
			//連線字串自己看著辦
            connStr ="Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=BaseStation3;Data Source=.";
            conn = new SqlConnection(connStr);
        }

        public DBOperator(string connStr)
        {
            this.connStr = connStr;
            conn = new SqlConnection(connStr);
        }

        /// <summary>
        /// 開啟連線
        /// </summary>
        private void openConn()
        {
            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }
            else
            {
                conn.Close();
                conn.Open();
            }
        }

        /// <summary>
        /// 關閉連線
        /// </summary>
        private void closeConn()
        {
            if (conn.State != ConnectionState.Closed)
                conn.Close();
        }

        /// <summary>
        /// 獲取連線字串
        /// </summary>
        public string ConnString
        {
            get
            {
                return connStr;
            }
        }

        /// <summary>
        /// 獲得查詢的表
        /// </summary>
        /// <param name="sql">TSQL或儲存過程</param>
        /// <param name="getparam">引數新增方法</param>
        /// <returns>DataTable</returns>
        public DataTable getTable(string sql, getParams getparam)
        {
            SqlCommand comm = new SqlCommand(sql, conn);
            SqlDataAdapter da = new SqlDataAdapter();
            if (getparam != null)
            {
                getparam(comm);
            }
            da.SelectCommand = comm;
            DataTable dt = new DataTable();
            da.Fill(dt);
            return dt;
        }

        /// <summary>
        /// 獲得查詢的資料集
        /// </summary>
        /// <param name="sql">TSQL或儲存過程</param>
        /// <param name="getparam">引數新增方法</param>
        /// <returns>DataSet</returns>
        public DataSet getDataSet(string sql, getParams getparam)
        {
            SqlCommand comm = new SqlCommand(sql, conn);
            SqlDataAdapter da = new SqlDataAdapter();
            if (getparam != null)
            {
                getparam(comm);
            }
            da.SelectCommand = comm;
            DataSet dt = new DataSet();
            da.Fill(dt);
            return dt;
        }

        /// <summary>
        /// 執行TSQL或儲存過程
        /// </summary>
        /// <param name="sql">TSQL或儲存過程</param>
        /// <param name="getparam">引數新增方法</param>
        /// <returns>影響的行數</returns>
        public int Execute(string sql, getParams getparam)
        {
            int result = 0;
            SqlCommand comm = new SqlCommand(sql, conn);
            if (getparam != null)
            {
                getparam(comm);
            }
            openConn();
            result = comm.ExecuteNonQuery();
            closeConn();
            return result;
        }

        /// <summary>
        /// 執行dataReader繫結資料
        /// </summary>
        /// <param name="sql">查詢語句</param>
        /// <param name="reader">reader繫結方法</param>
        public void GetDataReader(string sql,getReader reader)
        {
            SqlCommand comm = new SqlCommand(sql,conn);
            openConn();
            if (reader != null)
            {
                reader(comm.ExecuteReader());
            }
            closeConn();
        }

        /// <summary>
        /// 執行dataReader繫結資料
        /// </summary>
        /// <param name="sql">查詢語句或儲存過程</param>
        /// <param name="getparam">儲存過程引數繫結</param>
        /// <param name="reader">reader繫結方法</param>
        public void GetDataReader(string sql,getParams getparam, getReader reader)
        {
            SqlCommand comm = new SqlCommand(sql, conn);
            if (getparam != null)
                getparam(comm);
            openConn();
            if (reader != null)
            {
                reader(comm.ExecuteReader());
            }
            closeConn();
        }
    }
}


下面是關於如何使用這個類。

1.讀取資料

DBOperator db=new DBOperator();

DataTable dt=db.getTable("select * from table1",null);

或者:dt=db.getTable("select * from table1 where id=@id",setPama);

現在需要一個setParam的定義如下:

private void setPama(SqlCommand comm)

{

comm.Parameters.AddWithValue("@id",id);

//後面的那個id當然是一個變數了,@id是上面select語句中的一個臨時變數。

2.資料操作

int num=db.Execute("insert into table1 (id,name) values(@id,@name)",setPama);//num的值就是資料庫操作後返回的影響的行數,可以通過num的值判斷是否修改成功。

private void setPama(SqlCommand comm)

{

comm.Parameters.AddWithValue("@id",id);//這個和讀取資料中的意思差不多

comm.Parameters.AddWithValue("@name",name);//一共定義了兩個變數,所以就兩句咯

3.呼叫儲存過程

int num =db.db.Execute("pro_test",setPama);//pro_test這個是資料庫中儲存過程的名字,setPama還是為儲存過程的引數設定值,第二個引數是不允許為空的----儲存過程的內容就不貼出來了

private void setPama(SqlCommand comm)

{

comm.Parameters.AddWithValue("@id",id);//這個@id是資料庫中的儲存過程中定義的引數的名稱。

comm.CommandType = CommandType.StoredProcedure;//這一句可是說明使用的是儲存過程,這也是為什麼上面提到的第二個引數不能為空的原因。

4.DataReader的我就不貼程式碼了。

幾乎所有的資料庫操作都包含在內了,對於小型的專案個人感覺還是比較好了。

對於設計模式,我瞭解的比較少,現在剛剛入門了一個MVVM,不知道在大型的專案中這個東西還好不好使。。。。

轉載於:https://www.cnblogs.com/flyking/archive/2010/12/09/1901646.html

相關文章