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

目录:

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

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

先来看一段代码

DbAccessor dba = DbAccessor.Create();

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

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

实际执行的sql

exec sp_executesql N‘select * from sys_product where [email protected]‘,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工厂类

    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”);

未完,待续……

时间: 2024-10-10 18:12:44

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

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

框架介绍 该框架主要用于数据库访问,封装了包括: 1.sql智能参数转换: 2.sql语句存储于配置文件: 3.sql查询输出实体或实体集: 4.分页查询: 5.批量写入: 6.简单的ORM功能: ……,该框架的设计思想来源于现在公司所用的一套数据访问框架,但本框架其内部的代码和架构为本人全新设计,不依赖于其它第三方类库(当然如果使用的是mysql或oracle的要添加引用其对应的数据库ado.net实现类库),基于.Net2.0. 框架Nuget安装及源码地址 Nuget地址:https://

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

在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreSQL.IBM DB2.或者国产达梦数据库等等,这些数据库的共同特点是关系型数据库,基本上开发的模型都差不多,不过如果我们基于ADO.NET的基础上进行开发的话,那么各种数据库都有自己不同的数据库操作对象,微软企业库Enterprise Library是基于这些不同数据库的操作做的抽象模型,适合多数据

企业级应用框架(二)三层架构之数据访问层的封装与抽象

接上一篇我们来对数据访问层进行封装与抽象.在上一篇我们知道,要解除BLL对DAL的依赖,我们就必须抽象出DAL层的接口,同时基于DAL的数据访问技术很多,如EF,ADO.NET,LINQ TO SQL,因此,我们的数据访问层必须对这些技术提供相应的支持.所以今天我们要做的事情有两件,第一,定义我们的数据访问层接口:第二,屏蔽各类数据库访问技术的差异,提供统一的数据库访问模型.举个例子,我们只需要修改一下我们的配置文件,就能够把ADO.NET的实现方式,改变成EF的实现方式.好下面搭建我们的三层构

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

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建 前言:这篇博客我们继续来实现我的权限系列,这个博客一段时间也没有写了,重点是我在想还写不写,最终我决定还是写下去,因为我们是为了学习,当别人提出意见的时候,我们可以参考和采纳,但是我们不一定非要采纳,上几篇博客大家都说用CodeFirst来实现,是啊,现在基本很少有人用我的这种方法来实现了,都是用CodeF

开发自己的框架——(二)数据库工具类的封装

为了让框架的内容与数据分离,我们把常用的类封装到一个工具类中,当用到这些方法时,就调用这个封装好的类,能够使代码的复用性得到很大的提高.首先,封装数据库相关操作,为了使封装规范化,我们创建一个接口让数据库实现接口中的方法,数据库使用PDO扩展访问数据.数据库接口类 I_DAO.interface.php 1 <?php 2 interface I_DAO 3 { 4 //查询所有数据的功能 5 public function getAll($sql=''); 6 // //查询一条数据 7 pu

.net高效数据库访问框架(附带orm功能)

Gc.Db和Gc.Cache相关文章我已经写有一段时间了,谢谢大家关注.最近看了以前写的Gc.Db和SimpleOrm,对这两个框架作了优化和整合.此篇文章主要Gc.Db优化内容作下介绍. 下篇文章会配合着我整理的对Memcached和Redis分布式缓存框架Gc.CacheGc.Db和Gc.Cache整理成一个简单三层Demo.谢谢大家继续关注. 一.什么是Gc.Db及优化内容?   Gc.Db是基于Ado.net编写的数据库框架.  (1)目前支持MsSQL.Mysql.Sqlite.Ora

[开源].NET数据库访问框架Chloe.ORM

前言 13年毕业之际,进入第一家公司实习,接触了 EntityFramework,当时就觉得这东西太牛了,访问数据库都可以做得这么轻松.优雅!毕竟那时还年轻,没见过世面.工作之前为了拿个实习机会混个工作证明,匆匆忙忙学了两个月的 C#,就这样,稀里糊涂的做了程序员,从此走上了一条不归路.那会也只知道 SqlHelper,DataTable.ORM?太高档上,没听说过.虽然在第一家公司只呆了两个月,但让我认识了 EntityFramework,从此也走上了 ORM 的不归路...纯纯的实体,增改删

Sql Server来龙去脉系列之二 框架和配置

数据库对象 数据库维持了一系列表存储所有对象.数据类型/约束/配置项/资源等,在2008种我们叫他们为system base tables,并且这些表我们默认是看不到的.我们可以通过管理员登陆数据库,然后执行脚本: USE master; SELECT name FROM sys.objects WHERE type_desc = 'SYSTEM_TABLE'; 能查看到几十条数据.一般我们是不能查看到这些表里边的任何数据,只有通过DAC方式连接数据库才能查看到数据.这些数据主要被数据库引擎使用

SpringBoot入门 (五) 数据库访问之spring data jpa

本文记录学习使用spring data jpa访问数据库 一 什么是Spring Data JPA JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象.关联映射工具来管理Java应用中的关系数据.主要是为了简化现有的持久化开发工作和整合ORM技术,对不同的ORM框架提供统一的规范标准. Spring Data JPA 是Spring基于Hibernate框架和JPA(Java Persistence API)规范的基础上封装