編寫資料通路層代碼時,總要一邊又一邊的重複編寫:讀資料庫連接配接字元串,建立資料庫連接配接對象,打開連接配接,建立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();
}
/// 通過存儲過程傳回查詢表的資訊
/// <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];
/// 通過存儲過程和參數傳回查詢表的資訊
/// <param name="sprocName"></param>
/// <param name="parameters"></param>
/// <returns></returns>
protected DataTable GetTable(string sprocName, SqlParameter[] parameters)
SqlParameterCollection sqlParams = mycm.Parameters;
//先清空原有的參數
mycm.Parameters.Clear();
//給Command添加參數
foreach ( SqlParameter parameter in parameters )
{
mycm.Parameters.Add( parameter );
}
/// 通過存儲過程及存儲過程參數執行對資料庫無傳回值的操作(如:新增,更新,删除等)
/// <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 );
//打開連接配接
//執行
mycm.ExecuteNonQuery();
//關閉連接配接
}
}
資料通路層代碼:
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);