您的位置:首页 > 运维架构 > 网站架构

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

2007-07-26 10:01 423 查看
定义数据库提供程序类型
  [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");

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息