這幾天搞了個簡單的三層,數據庫操作的幫助類實現
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Configuration; using System.Data;//DataSet/DataTable/DataRow/DataCol using System.Data.SqlClient;//SqlConnection/SqlCommand/SqlDataAdapter/SqlDataReader using System.Reflection;//反射命名空間 namespace DAL { /// <summary> /// 數據庫操作幫助類 /// </summary> public static class SQLHelper { //1.准備連接字符串 public static readonly string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; #region 2.執行查詢多行語句 - 返回數據表 +static DataTable ExcuteDataTable(string strSelectCmd, params SqlParameter[] paras) /// <summary> /// 2.執行查詢多行語句 - 返回數據表 /// </summary> /// <param name="strSelectCmd"></param> /// <param name="paras"></param> /// <returns></returns> public static DataTable ExcuteDataTable(string strSelectCmd, params SqlParameter[] paras) { //1.創建連接通道 using (SqlConnection conn = new SqlConnection(connStr)) { //2.創建適配器 SqlDataAdapter da = new SqlDataAdapter(strSelectCmd, conn); //2.1設置查詢命令的參數 da.SelectCommand.Parameters.AddRange(paras); //3.數據表 DataTable dt = new DataTable(); //4.將數據查詢並填充到數據表中 da.Fill(dt); return dt; } } #endregion #region 2.0升級泛型版 ------ 執行查詢多行語句 - 返回數據表 /// <summary> /// 2.0升級泛型版 ------ 執行查詢多行語句 - 返回數據表 /// </summary> /// <typeparam name="T2">泛型類型</typeparam> /// <param name="strSelectCmd">查詢sql語句</param> /// <param name="paras">查詢參數</param> /// <returns>泛型集合</returns> public static List<T2> ExcuteList<T2>(string strSelectCmd, params SqlParameter[] paras) { //1.創建連接通道 using (SqlConnection conn = new SqlConnection(connStr)) { //2.創建適配器 SqlDataAdapter da = new SqlDataAdapter(strSelectCmd, conn); //2.1設置查詢命令的參數 da.SelectCommand.Parameters.AddRange(paras); //3.數據表 DataTable dt = new DataTable(); //4.將數據查詢並填充到數據表中 da.Fill(dt); //5.將DataTable轉成泛型集合List<T2> if (dt.Rows.Count > 0) { //6.創建泛型集合對象 List<T2> list = new List<T2>(); //7.遍歷數據行,將行數據存入 實體對象中,並添加到 泛型集合中list foreach (DataRow row in dt.Rows) {//7.1先獲得泛型的類型(里面包含該類的所有信息 屬性 方法 字段...........) Type t = typeof(T2); //7.2根據類型創建該類型的對象 T2 model = (T2)Activator.CreateInstance(t);// new MODEL.Classes() //7.3根據類型 獲得 該類型的 所有屬性定義 PropertyInfo[] properties = t.GetProperties(); //7.4遍歷屬性數組 foreach (PropertyInfo p in properties) { //7.4.1獲得屬性名,作為列名 string colName = p.Name; //7.4.2根據列名 獲得當前循環行對應列的值 object colValue = row[colName]; //7.4.3將 列值 賦給 model對象的p屬性 //model.ID=colValue; p.SetValue(model, colValue, null); } //7.5將裝好 了行數據的 實體對象 添加到 泛型集合中 list.Add(model); } return list; } } return null; } #endregion #region 3.執行查詢多行語句 - 返回數據讀取器 +static SqlDataReader ExcuteDataReader(string strSelectCmd, params SqlParameter[] paras) /// <summary> /// 執行查詢多行語句 - 返回數據讀取器 /// </summary> /// <param name="strSelectCmd"></param> /// <param name="paras"></param> /// <returns></returns> public static SqlDataReader ExcuteDataReader(string strSelectCmd, params SqlParameter[] paras) { SqlConnection conn = null; try { //1.創建連接通道 conn = new SqlConnection(connStr); //2.創建命令對象 SqlCommand cmd = new SqlCommand(strSelectCmd, conn); //3.添加命令參數 cmd.Parameters.AddRange(paras); //4.打開連接 conn.Open(); //5.創建讀取器(當關閉此讀取器時,會自動關閉連接通道) SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);//當關閉此讀取器時,會自動關閉連接通道 //6.返回讀取器 return dr; } catch (Exception ex) { conn.Dispose(); throw ex; } } #endregion #region 4.執行非查詢語句(增刪改) +static int ExcuteNonQuery(string strCmd, params SqlParameter[] paras) /// <summary> /// 執行非查詢語句(增刪改) /// </summary> /// <param name="strCmd"></param> /// <param name="paras"></param> /// <returns></returns> public static int ExcuteNonQuery(string strCmd, params SqlParameter[] paras) { using (SqlConnection conn = new SqlConnection(connStr)) { SqlCommand cmd = new SqlCommand(strCmd, conn); cmd.Parameters.AddRange(paras); conn.Open(); return cmd.ExecuteNonQuery(); } } #endregion #region 5.查詢結果集里的第一個單元格的值(單個值)+static object ExcuteScalar(string strSelectCmd, params SqlParameter[] paras) /// <summary> /// 查詢結果集里的第一個單元格的值(單個值) /// </summary> /// <param name="strSelectCmd"></param> /// <param name="paras"></param> /// <returns></returns> public static object ExcuteScalar(string strSelectCmd, params SqlParameter[] paras) { using (SqlConnection conn = new SqlConnection(connStr)) { SqlCommand cmd = new SqlCommand(strSelectCmd, conn); cmd.Parameters.AddRange(paras); conn.Open(); return cmd.ExecuteScalar(); } } #endregion #region 6.查詢結果集里的第一個單元格的值(單個值)-- 泛型版本 + static T ExcuteScalar<T>(string strSelectCmd, params SqlParameter[] paras) /// <summary> /// 查詢結果集里的第一個單元格的值(單個值)-- 泛型版本 /// </summary> /// <typeparam name="T">類型參數</typeparam> /// <param name="strSelectCmd"></param> /// <param name="paras"></param> /// <returns></returns> public static T ExcuteScalar<T>(string strSelectCmd, params SqlParameter[] paras) { using (SqlConnection conn = new SqlConnection(connStr)) { SqlCommand cmd = new SqlCommand(strSelectCmd, conn); cmd.Parameters.AddRange(paras); conn.Open(); object o = cmd.ExecuteScalar(); return (T)Convert.ChangeType(o, typeof(T)); } } #endregion } }