本文模仿實現數據庫訪問的通用類,代碼清晰,而且很實用,包括了對數據庫的所有的常用的操作。
/// <summary> /// 數據庫訪問通用類 /// </summary> public class SqlHelper { private string connectionString; /// <summary> /// 設定數據庫訪問字符串 /// </summary> public string ConnectionString { set { connectionString = value; } } /// <summary> /// 構造函數 /// </summary> /// <param name="connectionString">數據庫訪問字符串</param> public SqlHelper(string connectionString) { this.connectionString = connectionString; } /// <summary> /// 執行一個查詢,並返回查詢結果 /// </summary> /// <param name="sql">要執行的sql語句</param> /// <param name="commandType">要執行的查詢語句的類型,如存儲過程或者sql文本命令</param> /// <returns>返回查詢結果集</returns> public DataTable ExecuteDataTable(string sql,CommandType commandType) { return ExecuteDataTable(sql, commandType, null); } /// <summary> /// 執行一個查詢,並返回結果集 /// </summary> /// <param name="sql">要執行的sql文本命令</param> /// <returns>返回查詢的結果集</returns> public DataTable ExecuteDataTable(string sql) { return ExecuteDataTable(sql, CommandType.Text, null); } /// <summary> /// 執行一個查詢,並返回查詢結果 /// </summary> /// <param name="sql">要執行的sql語句</param> /// <param name="commandtype">要執行查詢語句的類型,如存儲過程或者sql文本命令</param> /// <param name="parameters">Transact-SQL語句或者存儲過程參數數組</param> /// <returns></returns> public DataTable ExecuteDataTable(string sql, CommandType commandtype, SqlParameter[] parameters) { DataTable data = new DataTable(); //實例化datatable,用於裝載查詢結果集 using (SqlConnection con = new SqlConnection(connectionString)) { using (SqlCommand cmd = new SqlCommand(sql, con)) { cmd.CommandType = commandtype;//設置command的commandType為指定的Commandtype //如果同時傳入了參數,則添加這些參數 if (parameters != null) { foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } } //通過包含查詢sql的sqlcommand實例來實例化sqldataadapter SqlDataAdapter adapter = new SqlDataAdapter(cmd); adapter.Fill(data);//填充datatable } } return data; } /// <summary> /// 返回一個SqlDataReader對象的實例 /// </summary> /// <param name="sql">要執行的SQl查詢命令</param> /// <returns></returns> public SqlDataReader ExecuteReader(string sql) { return ExecuteReader(sql, CommandType.Text, null); } /// <summary> /// /// </summary> /// <param name="sql">要執行的sql語句</param> /// <param name="commandType">要執行查詢語句的類型,如存儲過程或者SQl文本命令</param> /// <returns></returns> public SqlDataReader ExecuteReader(string sql,CommandType commandType) { return ExecuteReader(sql, commandType, null); } /// <summary> /// 返回一個sqldatareader對象的實例 /// </summary> /// <param name="sql"></param> /// <param name="commandType"></param> /// <param name="parameters"></param> /// <returns></returns> public SqlDataReader ExecuteReader(string sql, CommandType commandType, SqlParameter[] parameters) { SqlConnection con = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand(sql, con); if (parameters != null) { foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameters); } } con.Open(); //CommandBehavior.CloseConnection參數指示關閉reader對象時關閉與其關聯的Connection對象 return cmd.ExecuteReader(CommandBehavior.CloseConnection); } /// <summary> /// 執行一個查詢,返回結果集的首行首列。忽略其他行,其他列 /// </summary> /// <param name="sql">要執行的SQl命令</param> /// <returns></returns> public Object ExecuteScalar(string sql) { return ExecuteScalar(sql, CommandType.Text, null); } /// <summary> /// /// </summary> /// <param name="sql"></param> /// <param name="commandType"></param> /// <returns></returns> public Object ExecuteScalar(string sql, CommandType commandType) { return ExecuteScalar(sql, commandType, null); } /// <summary> /// /// </summary> /// <param name="sql"></param> /// <param name="commandType">參數類型</param> /// <param name="parameters"></param> /// <returns></returns> public Object ExecuteScalar(string sql,CommandType commandType, SqlParameter[] parameters) { Object result=null; SqlConnection con=new SqlConnection(connectionString); SqlCommand cmd=new SqlCommand(sql,con); cmd.CommandType= commandType; if(parameters!=null) { foreach (SqlParameter parapmeter in parameters) { cmd.Parameters.Add(parapmeter); } } con.Open(); result=cmd.ExecuteScalar(); con.Close(); return result; } /// <summary> /// 對數據庫進行增刪改的操作 /// </summary> /// <param name="sql">要執行的sql命令</param> /// <returns></returns> public int ExecuteNonQuery(string sql) { return ExecuteNonQuery(sql, CommandType.Text, null); } /// <summary> /// 數據庫進行增刪改的操作 /// </summary> /// <param name="sql">對數據庫進行操作的sql命令</param> /// <param name="commandType">要執行查詢語句的類型,如存儲過程或者sql文本命令</param> /// <returns></returns> public int ExecuteNonQuery(string sql, CommandType commandType) { return ExecuteNonQuery(sql, commandType, null); } /// <summary> /// 對數據庫進行增刪改的操作 /// </summary> /// <param name="sql">要執行的sql語句</param> /// <param name="commandType">要執行的查詢語句類型,如存儲過程或者sql文本命令</param> /// <param name="parameters">Transact-SQL語句或者存儲過程的參數數組</param> /// <returns></returns> public int ExecuteNonQuery(string sql, CommandType commandType, SqlParameter[] parameters) { int count = 0; SqlConnection con = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand(sql, con); cmd.CommandType = commandType; if (parameters != null) { foreach(SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } } con.Open(); count = cmd.ExecuteNonQuery(); con.Close(); return count; } /// <summary> /// 返回當前連接的數據庫中所有用戶創建的數據庫 /// </summary> /// <returns></returns> public DataTable GetTables() { DataTable table = null; using (SqlConnection con = new SqlConnection(connectionString)) { con.Open(); table = con.GetSchema("Tables"); } return table; } }
如果我們建立了一個對數據庫訪問的通用類以後,在隨數據庫進行操作的時候嗎,就只需要先實例化對象,然後根據自己的需要,調用相應的方法就可以完成對數據庫的所有操作。這就是數據庫訪問層和業務邏輯層分開的好處。
這樣書寫的代碼,可以大大的減少我們代碼的復雜度,而且,繁瑣度也大大的降低了。
以上就是本文的全部內容,希望對大家的學習有所幫助。