目录:

“Zhuang.Data”轻型数据库访问框架(一)开篇介绍

“Zhuang.Data”轻型数据库访问框架(二)框架的入口DbAccessor对象

先来看一段代码

DbAccessor dba = DbAccessor.Create();

var dt = dba.QueryDataTable("select * from sys_product where productid=#Id#",new {Id=});

Console.WriteLine(DataTableUtil.ToString(dt));

实际执行的sql

exec sp_executesql N'select * from sys_product where productid=@Id',N'@Id int',@Id=1

DbAccessor抽象类

DbAccessor是一个抽象类(不同数据库会对应具体的实现类,如:SqlServerAccessor、OracleAccessor和MySqlAccessor),该类封装了许多用来执行sql的方法,如:Execute、ExecuteReader、ExecuteScalar、QueryDataSet、QueryDataTable和QueryEntities等方法。也就是说只要有了该抽象类的一个对象就可以使用以上的方法,那么如何能得到一个DbAccessor对象呢?DbAccessorFactory这个工厂类就是专门用来创建DbAccessor对象的,其实上面代码上的DbAccessor.Create()方法也是去调用DbAccessorFactory.Create()去得一个DbAccessor对象的。

DbAccessorFactory工厂类

aaarticlea/png;base64,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" alt="" />

    public static DbAccessor NewDbAccessor(string connectionString, string providerName)
{
DbAccessor dba = null; if (string.IsNullOrEmpty(providerName)
|| providerName == "System.Data.SqlClient"
|| providerName.ToLower() == DbProviderName.SqlServer.ToString().ToLower())
{
dba = new SqlServerAccessor(connectionString);
EvnValService.SetDbAccessorDbProviderName(dba, DbProviderName.SqlServer);
}
else if (providerName.ToLower() == DbProviderName.Oracle.ToString().ToLower())
{
dba = new OracleAccessor(connectionString);
EvnValService.SetDbAccessorDbProviderName(dba, DbProviderName.Oracle);
}
else if (providerName.ToLower() == DbProviderName.MySql.ToString().ToLower())
{
dba = new MySqlAccessor(connectionString);
EvnValService.SetDbAccessorDbProviderName(dba, DbProviderName.MySql);
}
else
{
Type tProviderName = Type.GetType(providerName);
if (tProviderName == null)
{
throw new Exception(string.Format("ConnectionString({0})的ProviderName({1})找不到该类型!", connectionString, providerName));
}
else if (!(tProviderName.IsSubclassOf(typeof(DbAccessor))))
{
throw new Exception(string.Format("ConnectionString({0})的ProviderName({1})该类型不是DbAccessor的实现类!", connectionString, providerName));
}
object oProviderName = Activator.CreateInstance(tProviderName, connectionString);
dba = oProviderName as DbAccessor; } return dba;
}

以上代码DbAccessorFactory类中一个方法,方法所做的就是,根据App.config或Web.config中配置中connectionString配置去创建具体的DbAccessor实现类

  <connectionStrings>

    <add  name="DefaultDb"
connectionString="Data Source=127.0.0.1;Initial Catalog=zhuangdb;Persist Security Info=True;User ID=sa; PassWord=zwb"
providerName="sqlserver"/> <add name="MySqlDb" connectionString="Data Source=192.168.121.130;Initial Catalog=zhuangdb;Persist Security Info=True;User ID=root; PassWord=zwb"
providerName="mysql"/> <add name="OracleDb" connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.126.129)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=xe)));User Id=zhuangdb;Password=zwb;"
providerName="oracle"/>
</connectionStrings>

connectionString配置中有一个providerName的属性,DbAccessorFactory会根据这里配置是什么数据库provider去创建具体对应的数据库DbAccessor实现类,如:当

providerName="sqlserver"时工厂创建出来的是一个SqlServerAccessor类的实例。

DbAccessorFactory类常用方法介绍

1、GetDbAccessor()

得到一个DbAccessor单例对象;

2、CreateDbAccessor()

创建一个新的DbAccessor对象,当前需要使用事务时候需要创建新的对象而不能使用单例;

3、CreateDbAccessor(string name)

创建一个新的DbAccessor对象,参数“name”对应配置文件中connectionStrings配置中的项置项名称(如果没有指定name的值的话将会自动取一个默认值“DefaultDb”);

未完,待续……

“Zhuang.Data”轻型数据库访问框架(二)框架的入口DbAccessor对象的更多相关文章

  1. “Zhuang.Data”轻型数据库访问框架(一)开篇介绍

    目录: “Zhuang.Data”轻型数据库访问框架(一)开篇介绍 “Zhuang.Data”轻型数据库访问框架(二)框架的入口DbAccessor对象 框架介绍 该框架主要用于数据库访问,封装了包括 ...

  2. Spring+Mybatis+Mysql搭建分布式数据库访问框架

    一.前言 用Java开发企业应用软件, 经常会采用Spring+MyBatis+Mysql搭建数据库框架.如果数据量很大,一个MYSQL库存储数据访问效率很低,往往会采用分库存储管理的方式.本文讲述如 ...

  3. 搭建Extjs框架(二)

    搭建Extjs 框架 二.编写入口文件 app.js,配置extjs 组件\视图文件路径 并将app.js引入index.html       在app.js中指定一些文件的路径,Extjs页面的起始 ...

  4. 在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持

    在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreS ...

  5. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建 前言:这 ...

  6. 数据库历险记(三) | 缓存框架的连环炮 数据库历险记(二) | Redis 和 Mecached 到底哪个好? 数据库历险记(一) | MySQL这么好,为什么还有人用Oracle? 面对海量请求,缓存设计还应该考虑哪些问题?

    数据库历险记(三) | 缓存框架的连环炮   文章首发于微信公众号「陈树义」,专注于 Java 技术分享的社区.点击链接扫描二维码,与500位小伙伴一起共同进步.微信公众号二维码 http://p3n ...

  7. Farseer.net轻量级开源框架 中级篇:动态数据库访问

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 自定义配置文件 下一篇:Farseer.net轻量级开源框架 中级篇: 数据库切换 ...

  8. ApiTesting全链路接口自动化测试框架 - 新增数据库校验(二)

    在这之前我完成了对于接口上的自动化测试:ApiTesting全链路接口自动化测试框架 - 初版(一) 但是对于很多公司而言,数据库的数据校验也尤为重要,另外也有小伙伴给我反馈希望支持. 所以最近几天我 ...

  9. 基于SqlSugar的数据库访问处理的封装,在.net6框架的Web API上开发应用

    我前面几篇随笔介绍了关于几篇关于SqlSugar的基础封装,已经可以直接应用在Winform项目开发上,并且基础接口也通过了单元测试,同时测试通过了一些Winform功能页面:本篇随笔继续深化应用开发 ...

随机推荐

  1. 04737_C++程序设计_第3章_函数和函数模板

    例3.1 传对象不会改变原来对象数据成员值的例子. #define _SCL_SECURE_NO_WARNINGS #include <iostream> #include <str ...

  2. docker制作node程序镜像:

    准备: 需要5个文件 新建一个docker文件夹 1 .ignore git忽略文件用的 2 pakage.json 安装NODE程序的 也可以直接拷贝进 docker文件加 3 node环境 lin ...

  3. mvc mvp mvvm区别

    1 mvc是有视图(view),控制器(controller),模型(model)组成 view(用户界面) controller (业务逻辑)            model(数据存储) 接受指令 ...

  4. hdu 3068 最长回文(manachar求最长回文子串)

    题目连接:hdu 3068 最长回文 解题思路:通过manachar算法求最长回文子串,如果用遍历的话绝对超时. #include <stdio.h> #include <strin ...

  5. [UI]抽屉菜单DrawerLayout分析(二)

    继续分析DrawerLayout的手势分发部分 谈到手势分发,这本身就是个好话题,DrawerLayout作为继承自ViewGroup得布局他可以拦截手势也可以分发给子view,也就是在 onInte ...

  6. Web前端性能优化——高频触发事件的防抖

    JS 提供了行为层的支持,为用户提供了交互的操作性. 然而,部分事件却常常有意无意的被频繁触发.比方浏览器窗体的 resize 事件.某个元素的 mouseover 事件,假设处理触发事件的回调函数过 ...

  7. LeetCode: Surrounded Regions [130]

    [题目] Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is cap ...

  8. ajax 实例

    jsp页面代码: <script type="text/javascript"> var xmlHttp; function createXMLHttp(){ if(w ...

  9. 对List对象按照某个成员变量进行排序

    /** * 对List对象按照某个成员变量进行排序 * @param list List对象 * @param sortField 排序的属性名称 * @param sortMode 排序方式:ASC ...

  10. Programming C#.Inheritance and Polymorphism

    继承 C#中,创建派生类要在派生类的名字后面加上冒号,后面再跟上基类的名字: public class ListBox : Control 提示:C++程序员注意了,C#没有私有或者保护继承 多态 继 ...