在信息管理系统的日常开发过程中,要维护很多表,因此如果是使用面向过程的开发方式的话,往往就要根据不同的表,写很多不同的SQL语句。万一数据库结构发生了更改那就这些语句哪里出错了还是一个问题。曾经我是手工去把数据库的表映射成类,然后来调用。当时完全没有什么设计可言,只是把数据库中的字段映射成类里的属性。然后增加一个Insert和Update方法来生成相应的Sql语句。优点是:其它人使用时,不用再关心数据库表的结构,只是操作这个类的实例就可以了。但缺点也有不少:工作量大(每个表都写一个类,每一个字段要写一个私有成员,写一个公开的属性,这些都是重复的体力劳动啊。),同时万一数据库有改动时,修改这个类也是比较麻烦的。
网上也有有不少开源的框架如NHibernate。不过初步了解了一下。使用起来还是比较麻烦的。还要搞个XML文件。那要输入和维护的东西不是更多了吗?
因此最近开发考虑有没有一些简单通用的方法可以使数据库转换成类。我打算利害.net的反射机制设计一个类层次。设计目标如下:
1、 首先要必须实现数据库表向类的映射。
2、 数据库的字段不一定要跟类的属性同名。(不过使用时同名还是会方便点的。^_^)
3、 要支持事务的机制。(这是后来在使用中才想到的,有很多情况要确保多个对象是同时更新的)。
4、 使用要方便(我比较喜欢不管是插入一个记录还是修改都只调用一个方法。而不希望区分Insert和Update方法)*_^比较懒,没办法。
废话说了不少,现在开发说说具体的设计与实现:
为了简化对数据库的操作,当然要设计一些工具类啦:
DBManager就是这里要用到的工具类,他可以根据app.config文件里的配置得到一个SqlConnection对象。还可以执行Sql语句。查询返回DataTable对象。还有很多其它功能。下面的代码只贴出用到的功能。
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using System.Text;
using System.IO;
namespace YZPTool
{
public class DBManager