EAF .NET数据库访问组件

 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框架的组件将陆续发上来敬请关注。

 

下载:数据访问组件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值