public static DataBase CreateData(string ConnectionString, string ProviderName)
        {
            //以下判断数据库类型并创建相应的对象
            if (ProviderName.ToUpper().Contains("OLEDB"))
            {
                OleDbDataAdapter oledbda = new OleDbDataAdapter();
                oledbda.SelectCommand = new OleDbCommand();
                oledbda.SelectCommand.Connection = new OleDbConnection(ConnectionString);
                return new DataBase(oledbda);
            }
            return null;
        }
    public class DataBase
    {
        private DbDataAdapter mDataAdapter; //指向传入的DbDataAdapter的引用
        private DbCommand mCommand;  //指向传入的DbDataAdapter.SelectCommand的引用
        /// <summary>  
        /// 构造函数
        /// </summary>
        /// <param name="DDA">获得一个实例化了的DbDataAdapter的派生类</param>
        public DataBase(DbDataAdapter DDA)
        {
           
            mDataAdapter = DDA;
            mCommand = DDA.SelectCommand
;
        }
    }---------------------------------------------------------------------------------------------------
   我想请教的是:
  1、第一个类的最后一句语句:return null; 是什么什么的,这样不会返回一个Null值吗,前面返回的DataBase不是没   用了?
  2、我觉得这两个类就是生成一个带有初始连接属性(Connection)的DataBase类,为何要用DataAdapter呢?直接用Command和Connection不好吗??
 
  ============================================
                                         我问的问题可能很蠢,请各位大哥帮忙。

解决方案 »

  1.   

    1.return null;返回null,如果条件满足,执行了花括号中的代码的时候,方法就提前返回了,这一句就不会被执行了。
    2.DataAdapter有它的用处。
      

  2.   

    一个方法只会return一个值,如果前面返回了DataBase,return null就不执行。用DataAdatper可以将数据加载的内存中,然后在内存中访问数据,不用总是连接着数据库同时访问。
      

  3.   


    我来告诉你:
    1。根本没得选,这是必须的,你删除了试试,你看能不能编译通过?
    如果没有这句,你前面是一个if语句,所以就有可能不成立(虽然你知道一定会成立,但是编译器认为不一定),而如果不成立,这个函数就没有return语句了,所以编译器会报错:并非所有的路径都返回值。
    2.DbDataAdapter为用于非连接数据库的,一般会填充到一个DataSet或DataTable里去
    DbCommand是面向连接的,也就是说要一直连接到数据库,才能读取。