比較完美的SqlHelper類
機房收費系統的時候我們用到了sqlhelper,可是隨著用的越來多,漸漸的發現或許我們設計的不是很好,下面的就是一個設計的比較完美的sqlhelper類
using System;using System.Collections.Generic;using System.Linq;using System.Text; using System.Data;using System.Data.SqlClient;using System.Configuration;namespace DAL{ public class SQLHelper { private SqlConnection sqlconn = null; private SqlCommand sqlcmd = null; private SqlDataReader sdr = null; /// <summary> /// 通過建構函式擷取資料庫連接對象 /// </summary> public SQLHelper() { //連通過設定檔來擷取資料庫連接字串 String connStr = System.Configuration.ConfigurationManager.ConnectionStrings["strConnection"].ToString(); //串連資料庫物件 sqlconn = new SqlConnection(connStr); } /// <summary> /// 得到串連資料庫物件,並且將資料庫連接開啟 /// </summary> /// <returns>返回一個串連資料對象</returns> private SqlConnection GetConn() { //判斷現行資料庫連接狀態來判斷是否執行資料連線 if (sqlconn.State == ConnectionState.Closed) { sqlconn.Open(); } return sqlconn; } /// <summary> /// 執行傳入增 刪 改的SQL語句與參數組(這裡執行的是帶參數的操作) /// </summary> /// <param name="strCmdText">傳入增 刪 改 SQL語句</param> /// <param name="paras">傳入的參數數組</param> /// <param name="cmdtype">命令類型</param> /// <returns>返回受影響的行數</returns> public int ExecuteNonQuery(string strCmdText, SqlParameter[] paras, CommandType cmdtype) { int intResult; //using語句執行SQL語句 ,這語句的目的是為了當用完了資料庫連接以後關閉資料庫連結節省資源 using (sqlcmd = new SqlCommand(strCmdText, GetConn())) { sqlcmd.CommandType = cmdtype; sqlcmd.Parameters.AddRange(paras); intResult = sqlcmd.ExecuteNonQuery(); } return intResult; } /// <summary> /// 執行傳入增 刪 改的SQL語句(這裡執行的是不帶參數的操作) /// </summary> /// <param name="strCmdText">傳入的增刪改的SQL語句</param> /// <param name="cmdtype">執行的命令類型</param> /// <returns>返回執行的記錄行數</returns> public int ExecuteNonQuery(string strCmdText, CommandType cmdtype) { //定義儲存返回行數的變數 int intResult; //try catch語句實施查詢並在查詢結束後,關閉資料庫連接 try { //將SQL語句與連線物件傳入執行查詢對象 sqlcmd = new SqlCommand(strCmdText, GetConn()); //執行查詢的資料庫操作類別 sqlcmd.CommandType = cmdtype; //執行查詢 sqlcmd.ExecuteNonQuery(); //返回查詢結果 intResult = sqlcmd.ExecuteNonQuery(); return intResult; } catch (Exception ex) { throw ex; } finally { //判斷現行資料連線狀態來改變資料庫狀態 if (sqlconn.State == ConnectionState.Open) { sqlconn.Close(); } } } /// <summary> /// 該方法執行傳入的SQL語句 (不帶參數) /// </summary> /// <param name="cmdtext">傳入的SQL語句或者需要執行的預存程序</param> /// <param name="cmdtype">執行的命令類型</param> /// <returns>返回DataTable類型的資料</returns> public DataTable ExecuteQuery(string cmdtext, CommandType cmdtype) { //執行個體化datatable對象 DataTable dt = new DataTable(); //傳入需要執行的SQL語句與串連資料庫物件 sqlcmd = new SqlCommand(cmdtext, GetConn()); //定義執行的類型 sqlcmd.CommandType = cmdtype; using (sdr = sqlcmd.ExecuteReader(CommandBehavior.CloseConnection)) { //將查詢結果載入到dt對象中 dt.Load(sdr); } //返回查詢結果 return dt; } /// <summary> /// 執行傳入的SQL語句及參數組 /// </summary> /// <param name="sql">傳入的SQL語句或預存程序</param> /// <param name="paras">參數數組</param> /// <param name="cmdtype">執行的命令類型</param> /// <returns></returns> public DataTable ExecuteQuery(string sql, SqlParameter[] paras, CommandType cmdtype) { //執行個體化datatable對象 DataTable dt = new DataTable(); //執行個體化資料庫執行對象 SqlCommand sqlcmd = new SqlCommand(); //需要執行資料庫操作的類別 sqlcmd.CommandType = cmdtype; //執行SQL語句 //sqlcmd = new SqlCommand(sql, GetConn ()); sqlcmd.Connection = GetConn(); sqlcmd.CommandText = sql; //傳入parameter參數組 sqlcmd.Parameters.AddRange(paras); //使用using來實現資料庫的關閉與開啟 using (sdr = sqlcmd.ExecuteReader(CommandBehavior.CloseConnection)) { //將查詢結果載入到dt對象中 dt.Load(sdr); } //返回查詢結果 return dt; } }}