您的位置:首页 > 数据库

EAF .NET数据库访问组件

2009-03-28 23:11 190 查看
EAF .NET数据库访问组件,此属于EAF 框架的一部分。



此组件提供数据持久化操作,数据库连接通过XML配置文件指定,可配置任意多个数据库连接和多种数据库,支持ODBC,OLEDB,SQLServer,Oracle四种方式的数据库连接。

SQL语句与程序完全分离,通过XML配置文件配置查询语句,并且可在程序发布之后根据需要任意调整。可随意更换数据库和查询语句,而不需要重新编译程序或重新部署程序。在也不用再程序充斥SQL语句了,而且完全杜绝SQL注入攻击。



EAF 数据库访问组件可用于B/S或者C/S的应用程序。支持多种数据库,具有非常清爽的数据集类,不再使用.NET的DataSet,使数据集合访问起来更简单快速。并且支持对数据集合的再次排序。

返回的结果集不采用对象方式(类似hibernate那样的方式)的原因是,减少配置量,提高程序性能,最初设计这个对象是用在服务器上的所以从速度和性能方面考虑,返回为数据映射的对象需要太多的反射操作,性能实在是不好,另外大多数时候还是采用数据集访问数据。

这个组件可以轻松的实现在一个程序内访问多个数据库,并且访问的方式都一样简单,基本都是两行搞定。

关于数据库连接的池化,结合.NET本身的池化方式实现,经过测试性能非常不错。
另外此组件提供了DataProvider对象可直接拖放到WindowsForm窗体程序中。

不像用拖的就手动实例化DataManager对象,效果一样。



废话少说,看看怎么用这个东西吧



第一步,配置数据库连接Database.xml,XML格式如下



<?xml version="1.0" encoding="utf-8" ?>
<config>
<!--
<connection>
<name>数据库连接名称,必须唯一</name>
<type>数据库连接类型,可选:ODBC,OLEDB,SQLServer,Oracle</type>
<string>数据库连接字符串,例如:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;Persist Security Info=True</string>
</connection>
-->
<connection>
<name>test</name>
<type>OLEDB</type>
<string>Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;Persist Security Info=True</string>
</connection>
</config>



第二步,配置需要执行的SQL命令Command.xml



<?xml version="1.0" encoding="utf-8" ?>
<config>
<!--
<command>
<name>脚本名称(调用脚本时将使用此名称,必须唯一)</name>
<type>SQL类型,可选:Text(SQL文本命令)/StoredProcedure(存储过程的名称)/TableDirect(表的名称)</type>
<execute>执行类型,可选:NonQuery(执行更新返回受影响的行数)/Scalar(执行查询返回结果集第一行第一列)/Reader(执行查询返回结果集)</execute>
<database>执行此命令的数据库名称,在Database.xml中定义</database>
<sql>SQL语句例如:INSERT INTO test ([text],[memo],[long],[datetime],[currency],[is],ole,url) VALUES (?,?,?,?,?,?,?,?)</sql>
<timeout>脚本执行超时时间</timeout>
<parameters>
<parameter>
<name>参数名称,在SQL脚本语句中定义的例如@name,可省略</name>
<type>参数类型,指定传入的参数类型String,须指定</type>
<direction>参数作用,Input/InputOutput/Output/ReturnValue,可省略</direction>
<size>参数长度,可省略</size>
</parameter>
</parameters>
</command>
-->
<command>
<name>insert</name>
<type>Text</type>
<execute>NonQuery</execute>
<database>test</database>
<sql>INSERT INTO test ([text],[memo],[long],[datetime],[currency],[is],ole,url) VALUES (?,?,?,?,?,?,?,?)</sql>
<timeout>10</timeout>
<parameters>
<parameter><type>String</type></parameter>
<parameter><type>String</type></parameter>
<parameter><type>Int32</type></parameter>
<parameter><type>DateTime</type></parameter>
<parameter><type>Currency</type></parameter>
<parameter><type>Boolean</type></parameter>
<parameter><type>Binary</type></parameter>
<parameter><type>String</type></parameter>
</parameters>
</command>
<command>
<name>delete</name>
<type>Text</type>
<execute>NonQuery</execute>
<database>test</database>
<sql>DELETE FROM test WHERE id=?</sql>
<timeout>10</timeout>
<parameters>
<parameter><type>Int</type></parameter>
</parameters>
</command>
<command>
<name>update</name>
<type>Text</type>
<execute>NonQuery</execute>
<database>test</database>
<sql>UPDATE test SET [text]=?,[memo]=?,[long]=?,[datetime]=?,[currency]=?,[is]=?,ole=?,url=? WHERE id=?</sql>
<timeout>10</timeout>
<parameters>
<parameter><type>String</type></parameter>
<parameter><type>String</type></parameter>
<parameter><type>Int32</type></parameter>
<parameter><type>DateTime</type></parameter>
<parameter><type>Currency</type></parameter>
<parameter><type>Boolean</type></parameter>
<parameter><type>Binary</type></parameter>
<parameter><type>String</type></parameter>
<parameter><type>Int</type></parameter>
</parameters>
</command>
<command>
<name>select</name>
<type>Text</type>
<execute>Reader</execute>
<database>test</database>
<sql>SELECT * FROM test</sql>
<timeout>10</timeout>
</command>
</config>



第三步,创建DataManager对象,主要负责管理数据库连接和SQL命令



DataManager dataManager = new DataManager("Config//Database.xml", "Config//Command.xml");



第四步,获得一个处理对象实例,主要负责执行数据库操作,此对象可重复使用



DataProcessor dataProcessor = dataManager.GetDataProcessor();



第五步,执行你配置的SQL命令



DataResult dataResultA = dataProcessor.Execute("insert", "insert test", "memo", 2147483646, DateTime.Now.ToString(), 123456789.01, true, new byte[2048], "http://www.google.com");



就这么简单,最后通过返回的DataResult访问执行结果,一切就ok了!!!

DataProcessor 对象简单说明

此对象只有一个方法Execute(string,...)采用可变参数,第一个参数是配置的SQL命令名称,就是Command.XML配置文件的<name></name>里面的值,后面的参数可以是任意数量,当然也可以没有,后面参数是按配置的参数顺序提供给执行SQL时的参数值,传入的参数数量必须大于等于配置的参数数量,多出来的参数不会使用,但是可以为后期调整SQL脚本留扩展。

DataResult对象属性简单说明

/// 获取执行命令的唯一名称,这个名称就是配置文件里面的name段
public string CommandName
/// 获得执行命令的数据库唯一名称,这个名称也是数据库配置文件里面的那个名称
public string DatabaseName
/// 获得命令的执行类型
public ExecuteType ExecuteType
/// 获得命令执行受影响的行数,如果执行的是INSERT,UPDATE,DELETE应该访问这个属性
public int ResultCount
/// 获得命令执行的第一行第一列值,如果是查询返回一个值应该访问这个属性
public Object ResultValue
/// 获得命令执行的数据集合,如果是数据集应该访问这个属性获得一个数据集
public Data ResultData
/// 获得命令执行是否成功的标记,成功为False失败为True
public bool Error
/// 获得命令执行的异常对象,如果执行失败可通过此属性获得异常
public Exception Exception



程序编译发布



把配置文件一起打包发布,后续可根据实际需要修改配置文件,可更改数据库类型,当然要注意SQL语句,不同的数据库SQL有差别所以可能要调整下SQL,程序不用重编译。



此组件正在开发中的功能

事务处理,目前还不支持事务。

批量处理,对数据库执行批量操作。

异步处理,对数据的操作采用异步方式执行。

同步处理,同时将命令的操作执行到多个配置的数据库中,就像有两个完全一样的数据库。





EAF框架的组件将陆续发上来敬请关注。



下载:数据访问组件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: