日期:2014-05-19  浏览次数:20466 次

通过“访问多种数据库”的代码来学习多态!(.net2.0版) (外加散分)
http://www.cnblogs.com/jyk/archive/2007/04/23/723519.html


本帖子针对初学者,如果您是老鸟可以略过。

语言环境:   asp.net2.0   。数据库没什么了,反正是要到达访问多种数据库的目的,但是语言一定是.net2.0。因为有几个地方.net1.1是不支持的。

目的:使用ADO.net访问多种数据库。

对于一个网站来说,访问数据库可以说是一个很基本的功能了,那么怎么实现这个功能呢?

假设我们要从数据库里读取News表里面的记录,那么常见的代码也许是这样的。

 

sql的访问方法
  1public   class   DALSQL
  2         {
  3                 public   DataTable   GetNewsList()
  4                 {
  5                         SqlConnection   cn   =   new   SqlConnection(DALFactory.cnString);//DALFactory.cnString   是什么?就是获取连接字符串,下面有说明
  6                         SqlDataAdapter   da   =   new   SqlDataAdapter( "select   *   from   News ",   cn);
  7                         DataTable   dt   =   new   DataTable();
  8
  9                         da.Fill(dt);//这里我不喜欢加名字,我觉得没有必要。
10
11                         return   dt;
12                 }
13         }
 

这样写没有什么错误,但是如果想要更换数据库怎么办呢?比如现在是SQL   2000,但是由于某种原因要换成Access,那么要怎么写代码呢?

 

OleDb的访问方法
  1public   class   DALOleDb
  2         {
  3                 public   DataTable   GetNewsList()
  4                 {
  5                         OleDbConnection   cn   =   new   OleDbConnection(DALFactory.cnString);
  6                         OleDbDataAdapter   da   =   new   OleDbDataAdapter( "select   *   from   News ",   cn);
  7                         DataTable   dt   =   new   DataTable();
  8
  9                         da.Fill(dt);//这里我不喜欢加名字,我觉得没有必要。
10
11                         return   dt;
12                 }
13         }


其实要改的地方并不多,只是把“Sql”换成“OleDb”就可以了。但是表多了就麻烦了,每一个地方都要改一遍,既繁琐又容易出错,怎么办?这时候就可以使用“多态”来解决更换数据库的问题。

先要补充两个基础知识,一个就是继承和多态。继承都不能理解的话,多态就不要想了。我见过的最简单易懂的是博客圆里的小菜编程成长记系列,那里讲得很明白了,我就不多说了(没有他说的那么好)。

http://www.cnblogs.com/cj723/archive/2007/04/02/697431.html     小菜编程成长记系列   (我就是通过这个系列才学会的。这里做一个简单的应用)

另一个基础知识就是,ADO.net的内部结构。当然不是要全部了解,只需要先了解一点点。我们可以借助Reflector.exe来查看内部代码。(Reflector的使用方法请到搜索引擎里找一下)


在.net2.0(.net1.1不是这样的,请注意)里面我们可以发现   SqlConnection、OleDbConnection等都是继承自DbConnection。他是一个抽象基类(如果不清楚的话可以先当作父类来看),就是说DbConnection   派生出了   SqlConnection   、O