第一种思路:
完全用底层的DbConnection,DbCommand,DbDataReader,DbTransaction,DbParameter.....实现,
不去管将来会用到SQLSERVER,ACCESS,ORACLE,ODBC ...
不知此方法可行否?第二种思路:
先用底层的 DbConnection,DbCommand,DbDataReader,DbTransaction,DbParameter.....
封住 一个Interface,
然后分别用Sql,Oracle,Access,ODBC 的 类去引用并实现方法
再用一个Factory 去根据Configuration来判断到底创建哪种连接。这两种方法到底哪种最好
请高手指点~!!

解决方案 »

  1.   

    注意:DbConnection,DbCommand,DbDataReader,DbTransaction,DbParameter 都是抽象类第二种思路可行,依赖注入
      

  2.   


    我下面这样写不行吗?
    public DbConnection dbConnection()
            {
                DbConn = DbProvider.CreateConnection();
                DbConn.ConnectionString = connectstring;
                return DbConn;
            }        public DbCommand dbCommand()
            {
                DbComm = DbProvider.CreateCommand();
                DbComm.Connection = dbConnection();
               // DbComm.CommandType = CommandType.Text;
               // DbComm.CommandText = sqlString;
                return DbComm;
            }
      

  3.   

    可以,DbProvider就是你的Factory
      

  4.   

    第一种方法中,在DAL中的代码是具体的SqlConnction,OracleConnection这样具体的操作类。然后去不同的Helper类中执行。
    而第二种方法中,在DAL层则都是使用DBConnection这些抽象类对象。去同一个DBHelper类中执行。然后在DBHelper中的factory根据配置生成具体的SqlConnction,OracleConnection对象。
    我个人感觉在IDAL和BL层调用2个可以是一样的。不同之处在于:
    第一种是在DAL层生确定用SqlConnction还是OracleConnection对象;
    而第二种方法是在DBHelper中才确定是SqlConnction还是OracleConnection对象;对于第2种方法,其实可以不适用IDAL接口和多个DAL,而是用一个DAL,因为都是使用DBProviderFactory中的对象。以为不同数据库主要差异是在SQL,所以可以只把不同数据库的SQL写在不同文件中。这样BL层直接调用DAL,要方便一些。我上一个小项目用的第2种,因为我接触的也不多,可能说的也不对。好些3层结构的都是用第一种,我也想知道第二种方法有什么缺点。
      

  5.   

    谢谢  zming ,cc_net我现在也想搞清楚
    两种方法到底哪个好第一种 直接用底层的写,封装好之后
    只须将自己需要的SQL,SP等等 
    往里面塞,让它自己判断连接哪种DB
    相对开发者本身当然是省很多事情,但是会不会影响到程序的性能?第二种 开发者写好DbHelper,根据不同的情况确定选择连接
    写的代码会多点。有没有人知道两种到底哪种更好?
    能否综合各方面分析下~~
      

  6.   

    第一种方法代码会多一些啊。因为每一个数据库都有多套实现。性能的话,分层当然会相对慢一些,但是相对的。但是和用DBHelper还是SqlHelper是没关系的。实质是一样的