ITPub博客

首页 > 数据库 > 数据库开发技术 > 数据库操作(1.0.0.1)(续) (转)

数据库操作(1.0.0.1)(续) (转)

原创 数据库开发技术 作者:amyz 时间:2007-08-17 11:35:56 0 删除 编辑
数据库操作(1.0.0.1)(续) (转)[@more@]

 XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

配置文件datamodel.xml

 

 

 

  select * FROM Bank_Library WHERE bank_id = @bankId

 

 

 

 

 

  SELECT * FROM Bank_Library WHERE bank_id = 1

 

 

 

 

  SELECT * FROM Account

 

 

 

说明:

1.  DataModel:根接点。

2.  Command:命令接点,代表一条sql命令语句;id命令编号,用来对命令进行编号,程序中将不使用;name命令的名称,程序中通过这个名称来调用;type命令的类型,有两种取值(command,produce),代表是SQL语句还是存储过程。

3.  CommandString:命令的SQL语句或存储过程的名称,直接填入可以在查询分析器中运行的SQL语句就可以。

4.  Param:参数结点,每个结点代表一个参数,id参数编号;name参数名称,必须和上面结点中引用的一致;default参数的缺省值;type参数的数据类型;size参数的数据长度;这些属性的设置都应该和数据库中的字段一致。

 

配置文件tableDefine.xml

 

 

 

 

 

 

 

 

说明:

1.  TableDefine:根结点。

2.  Table:表结点,代表一个数据库表。alias表的别名,程序中引用;name表的真实名称,和数据库中的表名一致。

3.  Column:列结点,代表一列的定义。alias列的别名,程序中引用;name列的真实名称,和数据库中的列名一致;datatype列定义的数据类型;length列定义的长度;nullflag列是否允许为空的标志;primarykey主键标志;foreignkey外键标志;default缺省值;autoadd自增标志。

4.  数据库中表的定义将通过程序直接导入这个配置文件中,至于表和表的关系,以后我会加上的。

 

Idbase接口

 

此接口类定义了数据库操作所公共的接口,所有针对不同的数据库实现的数据库操作类都应该遵从于这个接口,并且工厂(Factory)模式的应用,使得上层调用的时候,可以不需要考虑下面使用的特定的数据库引擎。

 

目前:SQL查询语句是事先写定了放于配置文件datamodel.xml中的,参数数组中参数的顺序和配置文件中参数的顺序保持一致。

我将进一步修改,把简单的查询语句自动生成,而不需要事先写入XML文件。

 

 

string GetSingle(string sqlStr, string [] vals);

Hashtable GetSingleRow(string sqlStr, string [] vals);

ArrayList GetMultiRow(string sqlStr, string [] vals);

void CreateItem(string itemName, string [] colsValueArray);

void ModifyItem(string itemName, string itemId, string [] colsNameArray, string [] colsValueArray);

void DeleteItem(string itemName, string itemId);

 

*  GetSingle():根据传进去的数据库操作的名称(定义于配置文件中)、参数数组,取回一个字符串类型的单值,比如:根据用户姓名取用户的地址。

*  GetSingleRow():根据传进去的数据库操作的名称(定义于配置文件中)、参数数组,取回数据库表中的一行多列,结果按照字段名、值的对应关系,存放于Hashtable中,方便于使用。比如:根据用户姓名取出用户的信息,当有多个行返回的时候,取到数据集的第一行。

*  GetMultiRow():根据传进去的数据库操作的名称(定义于配置文件中)、参数数组,取回数据库表中的多行多列,取回的是一个数组,数组中的每个元素都是一个Hashtable,每个Hashtable存储数据库表中的一行多列。比如:取出1979年出生的所有的用户列表,每个用户存在于一个Hashtable中,取到的数组中包含了所有符合条件的所有用户列表。

*  CreateItem():根据传进去的表名、要插入表的值数组,生成INSERT语句,执行数据库插入操作。注意:表明是一个别名,定义于配置文件中,并不是真实的数据库表名,中间有个隐射关系,这样可以保证在数据库表名改变的情况下不需要改变程序。列名也是同样的处理;另外,要插入的值必须和配置文件tableDefine.xml中定义的字段顺序一致,否则生成的语句会出错。比如:向用户表中插入一个新用户。

*  ModifyItem():根据传进去的表名、主键的值、要修改表的字段数组、值数组,其中字段数组和值数组必须一一对应,然后自动生成UPDATE语句。比如:根据用户名,修改用户表中用户的地址、电话。

*  DeleteItem():根据传进去的表名、主键的值,自动生成DELETE语句。比如:根据用户名删除用户资料。

 

SqlDBase类

 

实现了IDBase接口,公共方法的实现和上面介绍的接口类一致,值得说明的是这个类提供了两个构造器。

 

public SqlDBase(string conName)

public SqlDBase()

 

使用默认的数据库,可以使用第二个构造器,如果使用其他的数据库连接,则使用第一个构造器,参数和配置文件SystemConfig.xml中数据库连接的名称对应,从而指不同的连接。

 

DbaseFactory类

 

这是一个工厂类,实现了工厂模式,目的是为了上层调用的时候,不需要关心使用的那个数据库操作类,这取决于配置文件中的设定。

 

public static IDBase GetDBaseUtility()

public static IDBase GetDBaseUtility(string conName)

{

  IDBase myDBaseUtil = null;

  if(Constant.Data_Base.Equals("SQLSERVER2000"))

  {

  myDBaseUtil = new SqlDBase(conName);

  }

  return myDBaseUtil;

}

 

两个方法基本一致,参数只是为了指明使用哪个数据库连接。

 

工厂Factory模式

 

根据配置文件中指明的数据库,返回相应的操作类,在这里,如果配置中指定的数据库为“SQLSERVER2000”,则返回SqlDBase类。

 

 

结束语

 

与数据库相关的类的介绍就到这里了,写的过程中,自己都觉得很多地方没有写清楚,有兴趣的朋友看了源码应该可以完全明白的,只是源码到目前还没有完全完成,等完成以后一定发给大家,希望大家看了以后能给小弟一点指定,谢谢各位的关注。

 


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10752019/viewspace-963792/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    3982
  • 访问量
    7896819