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

下载:数据访问组件

EAF .NET数据库访问组件相关推荐

  1. oracle存储sql片段引入_强大的跨数据库访问组件 UniDAC使用教程:注释和SQL函数...

    Universal Data Access Components (UniDAC)是一款通用数据库访问组件,提供了多个数据库的直接访问,如针对Windows的Delphi,C++Builder, La ...

  2. delphi 用MDAC微软数据库访问组件的dll动态库

    delphi 用MDAC微软数据库访问组件的dll动态库 一.概念 MDAC(Microsoft Data Access Components)是微软数据库访问组件,Netpise和许多利用数据库的软 ...

  3. 成熟的软件组件都是老板用大把、大把的钱堆出来烧出来的,以最简单的数据库访问组件为例...

    为什么80%的码农都做不了架构师?>>>    自己虽然不属于技术强的那类人物,但算是勤奋用功"刨根问底"类型的,总喜欢把一个东西研究个透彻的那种,否则心里不踏实 ...

  4. 【大咖有约】新媒传信黄湘龙:飞信数据库访问组件的演进历程

    北京新媒传信科技有限公司架构师黄湘龙先生将作为DTCC 2016特邀嘉宾出席.并将于5月12日大会"数据库架构设计"专场分享题为<飞信数据库访问组件的演进历程>的演讲, ...

  5. 【商业版】C# ASP.NET 通用权限管理系统组件源码中的数据库访问组件可以全面支持Access单机数据库了...

    可能在5年前还用过Access单机数据库但是后来很少用了,可能平时接触的都是大型管理类系统的开发工作大部分是Oracle.SQLServer数据库上做开发的,很少做一些小网站或者单机版本的东西,所以跟 ...

  6. mysql数据库访问组件_mysql数据库访问组件

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  7. Delphi10.4使用FireDAC数据访问组件开发数据库软件学习开发教程(1)

    数据库访问是Delphi / C ++ Builder的专长.最新版本的Delphi / C ++ Builder支持使用称为FireDAC的通用数据库访问组件访问各种数据源.因此,在此博客中,我将向 ...

  8. AliasDB:简单统一灵活的数据库访问库(支持MSSQL/MySQL/SQLite/Oracle/ODBC/OleDb)适用于中小型系统...

    数据库访问各种规模的应用程序不可避免的操作,.NET对提供了简单方便统一的数据库访问类,并且通过Enterprise Lib提供了更为顶层的数据库访问库.在我的人个工作中,现在用得最多的就是通过&qu ...

  9. sqlsugar mysql连接字符串_通用数据访问组件UniDAC最新版本v8.2.4,支持Lazarus中的macOS 64位...

    UniDAC(Universal Data Access Components)是一款通用数据库访问组件,提供了多个数据库的直接访问,如针对Windows的Delphi, C++Builder, La ...

最新文章

  1. linux中sqlplus不能用_装修中不能用海沙,但是海沙已经偷偷走进了你的家
  2. day4-生成器并行运算
  3. JavaScript学习(八)—属性节点和属性值的操作
  4. keychain 专研
  5. 都不写代码,架构师整天在干啥?
  6. [K/3Cloud]有关单据显示行数限制和数据导出的建议
  7. 教你彻底禁止暴风影音后门进程自己启动
  8. 提供博客里提到的几个程序的下载地址
  9. [jzoj 6080] [GDOI2019模拟2019.3.23] IOer 解题报告 (数学构造)
  10. <el-link>去掉下划线
  11. 以结果为导向的项目管理
  12. 浦发银行计算机抓紧用面试题目,浦发银行面试问题
  13. PDF文件提取单独页面
  14. 并行数据转换为串行数据的转换器
  15. RTOS内功修炼记(七)—— 内存管理
  16. 李开复:创业开始别想太高 年轻人多看国外网站
  17. stm32 MPU6050 6轴姿态传感器的介绍与DMP的应用
  18. 【ART-PI】STM32H750XBH6 - 入手篇
  19. 神评:为什么要放弃it之家
  20. 行业分析-全球与中国甚高频数据交换系统市场现状及未来发展趋势

热门文章

  1. 年终总结spring mvc 代码篇结合之前写的
  2. Navicat v12.0.28破解
  3. 求最短路径的多种算法实现
  4. 数据结构---树(所有类型的树总结)
  5. 网上游戏服务器维护,游戏服务器正在维护中
  6. BUG FIX有感-深入了解TextView的行间距计算逻辑
  7. python提取图片中的信息
  8. 多智能体系统协同一致性问题(三)
  9. 2018-01-29-python-buildin_datatype
  10. Android实现全屏图片的欢迎界面