我的数据访问类(第二版)—— for .net2.0 (一)
2007-04-29 20:40 金色海洋(jyk) 阅读(3359) 评论(11) 编辑 收藏 举报
asp.net2.0已经出来好久了,由于许多的原因一直没有使用,一个月前才开始使用VS2005写东西。
这一个月里又重新学习了一下基础知识,比如多态、接口了什么的。
既然已经到了2.0了嘛,那么以前的数据访问的方式要不要变一下呢?简单看了一下,感觉还是我的那种方式好,至少时我已经用习惯了。那么用.net2.0的方法重写一遍吧。
看了一下Framework 2.0的代码,发现一个问题。虽然表面上ADO.NET的使用没有什么变化(加了一些功能,原来由的功能没有变),但是内部实现有比较大的变化,原来的接口的“工作”都改成了抽象基类。
正好可以利用这个特性来改一下支持多数据库的部分。
数据访问类分成了两个DLL,共 3+3个部分。
本着把变化提出来的思想,我把变化的地方编译成一个DLL,相对不变的地方编译成另一个DLL。
变化的地方又分为三个部分:读取web.config里的信息,基类,写错误日志。
不变的地方分为三个部分:SQL语句部分(静态函数),存储过程部分(需要实例化),填充实体类部分。
下面是容易变化的DLL代码:
着里的处理并不是太好,只是还没有想到更好的方法。
主要是读取连接字符串和数据库类型。
==================================================
简单工厂,根据数据库类型返回实例对应的实例。
一、利用了System.Data.Common; 里面的一些基类。
System.Data.Common.DbProviderFactory 还没有研究,好像可以利用它来实现,去掉switch。
但是我觉得数据访问的地方是比较特殊的,
1、数据库的种类是有限的,常用的也就三个(对于.net来说):MS SQL 、Orcale 、Access(属于OleDb),算上不常用的应该超不过十种,全都算上也超不过30种吧。
2、变化慢,出现一种新的数据库要多长时间呢?好长好长吧。
3、运行效率高,访问数据库是很频繁的事情,应该尽量提高运行效率,去掉不必要的地方。
综上所述,我感觉switch更好一点。两外为什么说这里是容易变化的地方呢?因为这里可以做很多的变化。
a、比如说我只用MS SQL,不可能用到其它的数据库,那么我可以把 简化 CreateConnection() 函数,去掉判断的部分,直接返回 SqlConnection()。这样可以提高一点效率。
b、比如我只在MS SQL和 Orcale 之间切换,那么我可以只写两个判断,呵呵,以后再加数据库,再加一条判断就可以了。因为数据库的变换是很慢的,所以改动程序也没有什么麻烦的。
二、这里的处理也不是太好,至少缩小了使用范围,这么写的目的主要是让调用的地方减少点代码。两外也是按照我的习惯来写的。
======================================
记录出错信息的代码
这个对于经常在程序里面使用SQL语句的兄弟们是很实用的,因为它会把出错的SQL语句、出错的描述(ex.Message)、函数名称、出错的时间,写到一个文本文件里面。对于查错是很方便的。存储过程的话帮助不是很大,因为存储过程的出错描述总是让人很晕,记录下来帮助也不是很大。
这一个月里又重新学习了一下基础知识,比如多态、接口了什么的。
既然已经到了2.0了嘛,那么以前的数据访问的方式要不要变一下呢?简单看了一下,感觉还是我的那种方式好,至少时我已经用习惯了。那么用.net2.0的方法重写一遍吧。
看了一下Framework 2.0的代码,发现一个问题。虽然表面上ADO.NET的使用没有什么变化(加了一些功能,原来由的功能没有变),但是内部实现有比较大的变化,原来的接口的“工作”都改成了抽象基类。
正好可以利用这个特性来改一下支持多数据库的部分。
数据访问类分成了两个DLL,共 3+3个部分。
本着把变化提出来的思想,我把变化的地方编译成一个DLL,相对不变的地方编译成另一个DLL。
变化的地方又分为三个部分:读取web.config里的信息,基类,写错误日志。
不变的地方分为三个部分:SQL语句部分(静态函数),存储过程部分(需要实例化),填充实体类部分。
下面是容易变化的DLL代码:
读取Webconfig文件
着里的处理并不是太好,只是还没有想到更好的方法。
主要是读取连接字符串和数据库类型。
==================================================
简单工厂,根据数据库类型返回实例对应的实例。
1sing System;
2using System.Collections.Generic;
3using System.Text;
4using System.Data;
5using System.Data.Common;
6using JYK;
7
8namespace JYK.DataAccessLibrary
9{
10 /// <summary>
11 /// 返回Connection、Command、DataAdapter
12 /// </summary>
13 public class Factory
14 {
15
16 public static string DataBaseType = WebConfig.DataBaseType();
17 Connection
47
48 Command
77
78 DataAdapter
116
117 }
118}
119
2using System.Collections.Generic;
3using System.Text;
4using System.Data;
5using System.Data.Common;
6using JYK;
7
8namespace JYK.DataAccessLibrary
9{
10 /// <summary>
11 /// 返回Connection、Command、DataAdapter
12 /// </summary>
13 public class Factory
14 {
15
16 public static string DataBaseType = WebConfig.DataBaseType();
17 Connection
47
48 Command
77
78 DataAdapter
116
117 }
118}
119
一、利用了System.Data.Common; 里面的一些基类。
System.Data.Common.DbProviderFactory 还没有研究,好像可以利用它来实现,去掉switch。
但是我觉得数据访问的地方是比较特殊的,
1、数据库的种类是有限的,常用的也就三个(对于.net来说):MS SQL 、Orcale 、Access(属于OleDb),算上不常用的应该超不过十种,全都算上也超不过30种吧。
2、变化慢,出现一种新的数据库要多长时间呢?好长好长吧。
3、运行效率高,访问数据库是很频繁的事情,应该尽量提高运行效率,去掉不必要的地方。
综上所述,我感觉switch更好一点。两外为什么说这里是容易变化的地方呢?因为这里可以做很多的变化。
a、比如说我只用MS SQL,不可能用到其它的数据库,那么我可以把 简化 CreateConnection() 函数,去掉判断的部分,直接返回 SqlConnection()。这样可以提高一点效率。
b、比如我只在MS SQL和 Orcale 之间切换,那么我可以只写两个判断,呵呵,以后再加数据库,再加一条判断就可以了。因为数据库的变换是很慢的,所以改动程序也没有什么麻烦的。
二、这里的处理也不是太好,至少缩小了使用范围,这么写的目的主要是让调用的地方减少点代码。两外也是按照我的习惯来写的。
======================================
记录出错信息的代码
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace JYK.DataAccessLibrary
6{
7 public class WriteLog
8 {
9 设置出错信息
33
34 记录错误日志
65 }
66}
67
2using System.Collections.Generic;
3using System.Text;
4
5namespace JYK.DataAccessLibrary
6{
7 public class WriteLog
8 {
9 设置出错信息
33
34 记录错误日志
65 }
66}
67
这个对于经常在程序里面使用SQL语句的兄弟们是很实用的,因为它会把出错的SQL语句、出错的描述(ex.Message)、函数名称、出错的时间,写到一个文本文件里面。对于查错是很方便的。存储过程的话帮助不是很大,因为存储过程的出错描述总是让人很晕,记录下来帮助也不是很大。