初学者:通用数据库操作

第一次写东西 各位大大海涵

一个系统执行一个数据操作的步骤:

1.连接数据库。

2.构建Sql 语句。

3.执行语句。

4.返回 执行结果。

实例代码下载实例代码下载

注:

     一个系统可能有 N 个操作 ,然后另一个系统也要执行数据访问操作,那么我们可以不可以把连接数据、库执行语句、返回结果

写成一个公共的东西呢? 答案是一定的。例如:NHibernate 我们只要引用它的类库、配置数据库连接语句和Mapping 文件 就可以

进行操作了。那我今天说的是 不用写配置文件 的一个 公用数据库操作类库。暂时只实现查询

首先我们编写一个接口:


IDataProvider


 DbConnection OpenConnection(); 打开一个数据库连接

  void Open(); 当连接为关闭状态时 再次打开连接

  void Close(); 关闭连接

  IDataReader ExecuteReader(
string sql); 执行Sql 语句返回执行结果

  int ExecuteNonQuery(
string sql); 执行 修改、删除、增加

  ICollection<TEntity> ExcuteReader<TEntity>(string sql) where TEntity : class;  执行查询返回对象集合 


然后为接口写一个抽象类:

DataProviderBase

在 DataProviderBase 中出现了 Translate 属性 他是什么呢 ? 他是一个 (IEntityTranslate) 转换器

 将IDataReader 转换为Entity


代码如下:

IEntityTranslate

 

为什么转换器中会出现 DataColumn 是 System.Data 命名空间下的吗? 不是 这是一个自定义的 Attirbute

DataColumn
注释:

      ColumnName :将数据库的Filed 和 Entity Property 对应。


到这里还要做什么呢? 对了还缺少实现,那么我们开始实现这个 Provider


SqlDataProvider

好了准备工作做好了!那么我们开始测试吧:

既然测试那么不能少了数据库:


CREATE TABLE Customer(
[CustomerID] [int] NOT NULL,
[CustomerName] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,

)

添加两条数据:
100001 測試修改客戶1212
100002 SecondCus

准备一个Entity:

Customer

是不是发现 Entity中出现了 [DataColumn("CustomerID")] 呢! 对了 这里就是将数据库的列和Entity对应上。

伟大的时刻要即将到来:


Test
输出结果:
100001 測試修改客戶1212
100002 SecondCus

Yes 成功了!


posted @ 2009-09-23 17:41  Paabo  阅读(2683)  评论(18编辑  收藏  举报