為資料訪問層編寫一個基類

來源:互聯網
上載者:User
訪問|資料 在編寫資料訪問層代碼時,總要一邊又一邊的重複編寫:讀資料庫連接字串,建立資料庫連接對象,開啟串連,建立Command對象,建立資料配接器,建立資料集,填充資料集,關閉串連。這種重複的代碼寫一兩次到還行,寫多了就免不了有一些煩了。
  在總結以前的代碼以後,決定重構資料方法層的代碼。資料訪問層無非進行兩種操作:查詢返回DataTable,進行插入、更新、刪除等無傳回值的操作。只要增加一個資料訪問層基類包含這些繁瑣的代碼,其餘的資料訪問層代碼繼承資料訪問層基類,在調用基類函數時給出預存程序名稱和預存程序參數即可。 
資料訪問層基類代碼:
using System;
using System.Data;
using System.Collections; 
using System.Data.SqlClient;
namespace DAL
{
 /// <summary>
 /// DALBase 的摘要說明。
 /// 資料層訪問基類,定義資料層訪問公用的變數,方法
 /// </summary>
 public class DALBase
 {
  //定義該類共用變數
  private SqlConnection conn;  //
  private SqlCommand mycm;  //
  private DataSet myds;   //
  private SqlDataAdapter myda; //
  
  /// <summary>
  /// 從web.config中讀取資料庫連接字串
  /// </summary>
  private string CONNSTR = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
  public DALBase()
  {
   //建構函式,建立對象執行個體
   conn = new SqlConnection(CONNSTR);
   mycm = conn.CreateCommand();
   myds = new DataSet();
   myda = new SqlDataAdapter();
  }
  /// <summary>
  /// 通過預存程序返回查詢表的資訊
  /// </summary>
  /// <param name="sprocName">預存程序名稱</param>
  /// <returns>DataTable</returns>
  protected DataTable GetTable(string sprocName)
  {
   conn.Open();
   try
   {
    mycm.CommandText = sprocName;
    mycm.CommandType = CommandType.StoredProcedure;
    myda.SelectCommand = mycm;
    myda.Fill(myds);
   }
   finally
   {
    //無論語句執行正確與否,都關閉串連釋放資源
    conn.Close();
   }
   return myds.Tables[0];
  }
  /// <summary>
  /// 通過預存程序和參數返回查詢表的資訊
  /// </summary>
  /// <param name="sprocName"></param>
  /// <param name="parameters"></param>
  /// <returns></returns>
  protected DataTable GetTable(string sprocName, SqlParameter[] parameters)
  {
   conn.Open();
   try
   {
    mycm.CommandText = sprocName;
    mycm.CommandType = CommandType.StoredProcedure;
    SqlParameterCollection sqlParams = mycm.Parameters;
    //先清空原有的參數
    mycm.Parameters.Clear();
    //給Command添加參數
    foreach ( SqlParameter parameter in parameters )
    {
     mycm.Parameters.Add( parameter );
    }
    myda.SelectCommand = mycm;
    myda.Fill(myds);
   }
   finally
   {
    //無論語句執行正確與否,都關閉串連釋放資源
    conn.Close();
   }
   return myds.Tables[0];
  }

  /// <summary>
  /// 通過預存程序及預存程序參數執行對資料庫無傳回值的操作(如:新增,更新,刪除等)
  /// </summary>
  /// <param name="sprocName">預存程序名稱</param>
  /// <param name="parameters">預存程序參數</param>
  protected void SaveTale(string sprocName, SqlParameter[] parameters)
  {
   mycm.CommandText = sprocName; 
   mycm.CommandType = CommandType.StoredProcedure; 
   SqlParameterCollection sqlParams = mycm.Parameters;
   //先清空原有的參數
   mycm.Parameters.Clear();
   //給Command添加參數
   foreach ( SqlParameter parameter in parameters )
   {
    mycm.Parameters.Add( parameter );
   }
   //開啟串連
   conn.Open();
   try
   {
    //執行
    mycm.ExecuteNonQuery(); 
   }
   finally
   {
    //關閉串連
    conn.Close();
   }
  }
 }
}
資料訪問層代碼:
using System;
using System.Data;
using System.Collections; 
using System.Data.SqlClient;
namespace DAL
{
 public class Test : DALBase
 {
  public Test()
  {
  }
  public DataTable GetTestTable()
  {
    return base.GetTable("預存程序名稱");
  }
  public DataTable GetTestTableByXName(string XName)
  {
      SqlParameter[] parameters = { new SqlParameter( "@XName",SqlDbType.NVarChar,10 ) };  
      return base.GetTable("預存程序名稱",parameters);
  }

  public void AddTestTable(string XName, string Description)
  {
   SqlParameter[] parameters = 
   {
    new SqlParameter( "@XName",SqlDbType.NVarChar,10 ),
    new SqlParameter( "@Description",SqlDbType.NVarChar,100)
   };
 
   //設定參數值
   parameters[0].Value = XName;
   parameters[1].Value = Description;
   base.SaveTale("預存程序名稱",parameters);
  }
 }
}
大家有興趣還可以幫忙擴充一下這個基類,比如增加通過SQL語句返回DataTable,返回單值結果(如:查詢合計)……

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。