自适应多种数据库的组件设计(各位久违了)

timmy3310 2003-08-26 11:44:40
各位C#版的大虾小虾:
抱歉,我这个版主实在是不称职,前段时间忙得不可开交,没办法经常上来,这里的事务有劳班兄和阿力兄了。
今天上来,看到几个朋友提出了关于数据库设计的一些问题,于是马上跑去写了一篇文章,希望大家能够原谅我。
我实在是对不住大家了......大家蹂躏我吧~~~~


言归正转:
自适应多种数据库的组件设计

.Net类库的数据库处理方式比ASP进步很多,多种数据提供程序提供了不同的数据库连接方式,到.Net Framework1.1版,已经自带了:
SqlClient
OleDb
Oracle
Odbc
四种方式,这四种方式各有优势,对于开发者来说,如果在没有效率损失的前题下设计出适用多种数据提供方式的组件,无疑可以大大提高编码效率和组件重用率。

.Net类库定义了一套数据提供程序设计的规范,上述四个提供程序都满足了该规范,在该规范的约束下,我们完全可以在逻辑层写出与底层实现无关的代码。

该规范,大家可以参考:
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconimplementingnetdataprovider.htm
(注:我使用的是VS.Net2003中文版,其他版本的朋友请自行替换联接)

我在这里为了方便讲述,大致提一下

.Net类库设计了一系列的接口,.Net Framework数据提供程序应该实现这些接口,这些接口包括:
IDbConnection 数据库连接
IDbTransaction 本地事务
IDbCommand 命令
IDataParameter 参数
IDataParameterCollection 参数集合
IDataReader 只读数据流
IDataAdapter 数据适配器
IDbDataAdapter 面向数据库的适配器

对于DataAdapter有一点补充,.Net实现了一个DbDataAdapter类,该类实现了IDataAdapter和IDbDataAdapter,并提供了更丰富的方法,一般来说,完整的Net数据提供程序的DataAdapter都是从该类直接派生,如SqlDataAdpater、OleDbDataAdapter

另外,接口本身不能定义构造器,所以.Net制定了了另一套构造器的规范,请参考:
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconimplementingnetdataprovidercodeconventions.htm

到这里,大家应该明白我想说什么了吧,我们可以写一套组件来动态根据配置创建这些接口,而在逻辑层使用统一的接口,那么就达到了逻辑与底层分离的设计思想。
大家应该都接触过设计模式,听说过工厂模式,实际上在这里正是工厂模式发挥作用的时候,比如我们写一个创建Connection对象的工厂来创建连接对象:
...全文
238 80 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
80 条回复
切换为时间正序
请发表友善的回复…
发表回复
webspice 2004-02-19
  • 打赏
  • 举报
回复
webpsice
cuipi2003 2004-02-18
  • 打赏
  • 举报
回复
贱人呀,贱人,我以后也转到你的版来混,哈哈。。。
w9 2004-02-18
  • 打赏
  • 举报
回复
up
fireboyg 2004-02-18
  • 打赏
  • 举报
回复
楼主,万岁!呵呵
Jinniu 2004-02-18
  • 打赏
  • 举报
回复
up
LighBlade 2004-02-18
  • 打赏
  • 举报
回复
收藏完慢慢蹂躏
Exchange2000 2004-02-18
  • 打赏
  • 举报
回复
学习
henryfan1 2003-10-27
  • 打赏
  • 举报
回复
我比较喜欢用SQLHelper
只要查询替换一下就是OLEDB版了。
flers 2003-10-27
  • 打赏
  • 举报
回复
DING
flers 2003-10-27
  • 打赏
  • 举报
回复
DING
维她奶 2003-10-27
  • 打赏
  • 举报
回复
学习!
liduke 2003-10-27
  • 打赏
  • 举报
回复
学习
Reeezak 2003-10-27
  • 打赏
  • 举报
回复
好东西啊
收藏!
rgbcn 2003-10-26
  • 打赏
  • 举报
回复
yan1617 2003-09-21
  • 打赏
  • 举报
回复
up
zhehui 2003-09-21
  • 打赏
  • 举报
回复
高手的问题要多多的研究。
win_feng 2003-09-01
  • 打赏
  • 举报
回复
学习
coda 2003-09-01
  • 打赏
  • 举报
回复
偶再项目中的解决方案是直接给出一个IDB接口,包含了必要的数据操作方法,比如获取数据、获取流、获取数据列表之类的东西,而接口的实现,也就是与具体数据库打交道的东西在数据层封装起来,像SQLDB、AccessDB、OracleDB之类的东西。最后将这个接口Remoting起来。
Jim3 2003-08-30
  • 打赏
  • 举报
回复
学习
chenhigh 2003-08-30
  • 打赏
  • 举报
回复
刚好在研究这方面
谢了
加载更多回复(60)

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧