日期:2012-05-19  浏览次数:20590 次

在编写数据访问层代码时,总要一边又一边的重复编写:读数据库连接字符串,建立数据库连接对象,打开连接,创建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);
   }
  &nb