编写数据访问层代码时,总要一边又一边的重复编写:读数据库连接字符串,建立数据库连接对象,打开连接,创建Command对象,创建数据适配器,创建数据集,填充数据集,关闭连接。这种重复的代码写一两次到还行,写多了就免不了有一些烦了。
  在总结以前的的代码以后,决定重构数据方法层的代码。数据访问层无非进行两种操作:查询返回DataTable,进行插入、更新、删除等无返回值的操作。只要增加一个数据访问层基类包含这些繁琐的代码,其余的数据访问层代码继承数据访问层基类,在调用基类函数时给出存储过程名称和存储过程参数即可。

数据访问层基类代码:
为数据访问层编写一个基类using System;
为数据访问层编写一个基类
using System.Data;
为数据访问层编写一个基类
using System.Collections; 
为数据访问层编写一个基类
using System.Data.SqlClient;
为数据访问层编写一个基类
为数据访问层编写一个基类
namespace DAL
{

为数据访问层编写一个基类    
/// DALBase 的摘要说明。
为数据访问层编写一个基类    
/// 数据层访问基类,定义数据层访问公共的变量,方法
为数据访问层编写一个基类    
/// </summary>
为数据访问层编写一个基类    public class DALBase
{
为数据访问层编写一个基类        
//定义该类共用变量
为数据访问层编写一个基类
        private SqlConnection conn;        //
为数据访问层编写一个基类
        private SqlCommand mycm;        //
为数据访问层编写一个基类
        private DataSet myds;            //
为数据访问层编写一个基类
        private SqlDataAdapter myda;    //
为数据访问层编写一个基类
        

为数据访问层编写一个基类        
/// 从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>
为数据访问层编写一个基类        
/// <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>
为数据访问层编写一个基类        
/// <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>
为数据访问层编写一个基类        
/// <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)
{
;     
为数据访问层编写一个基类            
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,返回单值结果(如:查询合计)……
  注:使用该方法的一个坏处就是用久了以后就会忘记如何进行数据访问的具体方法只会调用基类方法,如果面试问起访问数据库的代码就……^-^。

相关文章: