利用.net开发可扩展的数据访问架构

定义数据库提供程序类型
  [Flags]
 public enum arscDatabaseProvider
 {
        arscOracle=1,     //Oracle数据库        
        arscMsSql=2,    //Sql Server数据库
        arscOledb=4,//Access、Execl等微软的本地数据库
        arscOdbc=8,//ODBC驱动连接的数据库
        arscRomete = arscOracle | arscSqlserver //远程数据库连接
 }

定义工厂接口:
public interface IDBFactory
{
        IDBConnection GetConnection();
        IDBConnection GetConnection(string connectString);
        IDBDataAdapter GetDataAdapter();
        IDBDataAdapter GetDataAdapter(IDBCommand command);
        //..........
}

实现接口:
public class OleDBFactory:IDBFactory
{
        public IDBConnection GetConnection()
        {
                  return new OleDbConnection();
        }
        public IDBConnection GetConnection(string connectString)
        {
                  return new OleDbConnection(connectString);
        }

        public  IDBDataAdapter GetDataAdapter()
        {
                  return new OleDbDataAdapter();
        }

        public  IDBDataAdapter GetDataAdapter(IDBCommand command)
        {
                  OleDbDataAdapter adapter =new OleDbDataAdapter();
                  adapter.SelectCommand=command;
                  return adapter ;
        }
}

实现接口:
public class OracleDBFactory:IDBFactory
{
        public IDBConnection GetConnection()
        {
                  return new OracleConnection();
        }
        public IDBConnection GetConnection(string connectString)
        {
                  return new OracleConnection(connectString);
        }

        public  IDBDataAdapter GetDataAdapter()
        {
                  return new OracleDataAdapter();
        }

        public  IDBDataAdapter GetDataAdapter(IDBCommand command)
        {
                  OracleDataAdapter adapter =new OracleDataAdapter();
                  adapter.SelectCommand=command;
                  return adapter ;
        }
}
下面几个类按照改思路继续写下去.如MsSqlDbFactory.ODBCDbFactory.

下面定义类封装数据库操作
public class DBOperator
{
        private string connectString;
        private arscDatabaseProvider provider;
        private static DBOperator operator=null;
        private DBOperator(){};
        private DBOperator(string connectionString,arscDatabaseProvider provider)
        {
                    this.connectString=connectionString;
                    this.provider=provider;
        }
        public static  DBOperator GetInstance(string connectionString,arscDatabaseProvider provider)
        {
                   if(operator == null)
                              operator=new DBOperator(connectionString,provider);
                   return operator ;
        }
        
         public DataTable Query(string sql)
         {
                      IDBFactory dbFactory=Singleton.CreateFactory(provider);
                      IDBConnection  conn=dbFactory.GetConnection(connectString);
                      IDBCommand command=conn.CreateCommand();
                      command.CommandType=CommandType.Text;
                      command.CommandText=sql;
                      IDBDataAdapter adapter=dbFactory.GetDataAdapter(command);
                      DataSet ds=new DataSet();
                      try
                      {        
                                  if(conn.State !=ConnectionState.Open)
                                             conn.Open();
                                  adapter.Fill(ds);
                      }
                      catch
                      {
                                    throw;
                      }
                      finally
                      {
                                conn.Close();
                      }
                      ds.Tables.Count>0 ?return ds.Tables[0]:return null;
         }
         public void Update(string sql)
          {//........................}
          //..........................................
}

..定义数据访问类
public clsss DbAccess
{
           private DBOperator operator;
           public DbAccess(DBOperator operator){this.operator=operator;}
           public Students GetStudents(string sql)
           /...........
}

访问代码
arscDatabaseProvider provider=arscDatabaseProvider.arscOledb;
string connString=@"C:/data.mdb";
DBOperator operator=DBOperator .GetInstance(connString,provider)

DbAccess dbAccess=new DbAccess(operator);
Students stus=dbAccess.GetStudents("select * from Students");

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值