DAM 简单跨数据库ADO.NET组件

它的特点:

在您保证SQL语句兼容的前提下,透过它来访问数据库时,在不需要改变DAL层一点代码的前提下,只要修改一下配置文件,它便可以为你跨不同类型的数据库。
让你的DAL层代码更见简练。它会根据配置文件配置的连接信息,自动为你创建数据库连接,执行操作。关闭连接,释放连接等.
让DAL层的不同模块访问不同类型或不同数据库更加方便。
不错的执行效率,它基于原生ADO.NET。只会反射一次访问不同数据库的ADO提供者的程序集(DAM最终都是通过这些提供者来实现访问不同类型数据库的)。
它的配置:


代码如下:

<appsettings>
<add key="rpsconnection" value="mssql"/>
<add key="damconnection" value="sqlite" />
</appsettings>
<connectionstrings>
<add name="sqlite" connectionString="" providerName="System.Data.SQLite.SQLiteConnection;System.Data.SQLite"/>
<add name="mssql" connectionString="" providerName="System.Data.SqlClient.SqlConnection;System.Data" />
</connectionstrings>

appsettings
1.添加一个KV。KEY="damconnection" VALUE="下面connectionstrings中的一个name的一项"."damconnection"为默认的DAM读取的KEY, KEY的名字请不要更换. VALUE的值可以根据您默认连接的数据库连接变而变.
2.如果想应用多个数据库连接,来访问不同的数据库. 您可以在appsettings中添加别的KV项.代码里使用DAM中Config或者Factroy来创建不同的数据库连接,可以实现访问不同的或不同类型的数据库.
connectionstrings
1.项中connectionString值不需要变
2.项中providerName值分为三个部分

连接的完整类名 ; 连接类所在的程序集名
(命名空间+类名) (中间用";"分开) (注意不加.dll)

测试代码:
DAL层测试代码


代码如下:

/// <summary>
/// 数据访问层
/// 透过Dam访问数据库
/// </summary>
public class DALTest
{
/// <summary>
/// 最简单的插入操作
/// Execute会帮你自动创建所对应数据库的连接、执行操作、释放Command、关闭连接、释放链接等
/// </summary>
/// <returns>执行后受影响行数</returns>
public int Insert()
{
return Execute.SExecuteNonQuery("sp_name", null);
//return Execute.SExecuteNonQuery("insert into tablename (..) values (..)", CommandType.Text , null);
}
/// <summary>
/// 带参数的插入操作
/// Execute会帮你自动创建所对应数据库的连接
/// 并帮你把参数类型转换为所对应数据库类型的参数进行数据库操作.
/// </summary>
/// <returns></returns>
public int Insert_Paras()
{
DbParameter[] paras =
{
new MySqlParameter("p1","p1value")
,new SqlParameter("p2","p2value")
};
return Execute.SExecuteNonQuery("sp_name", paras);
}
/// <summary>
/// 带参数的插入操作,并能得到参数返回值
/// Execute会帮你自动创建所对应数据库的连接
/// 并帮你把参数类型转换为所对应数据库类型的参数进行数据库操作.
/// 执行完成您可得到返回值
/// </summary>
/// <returns></returns>
public int Insert_Paras(ref string outputValue)
{
int resultInt = 0;
DbParameter[] paras =
{
new MySqlParameter("p1","p1value")
,new SqlParameter("p2_output","")
{
Direction = ParameterDirection.Output
}
};
resultInt = Execute.SExecuteNonQuery("sp_name", paras);
if (paras[1].Value != null) outputValue = paras[1].Value.ToString();
return resultInt;
}
/// <summary>
/// 带参数的插入操作,并能得到参数返回值,此参数从BLL层传来
///同上...
/// </summary>
/// <returns></returns>
public int Insert_Paras(DbParameter[] paras)
{
return Execute.SExecuteNonQuery("sp_name", paras);
//这样可以在BLL层通过 paras[1]来获取返回参数了
}
/// <summary>
/// 执行同连接多操作的事务处理
/// 这里使用1个带参数的存储过程和一个不带参数的sql语句操作
/// 使用是静态调用方法
/// </summary>
/// <returns></returns>
public bool Insert_Transaction()
{
bool resultBool = false;
DbParameter[] paras =
{
new MySqlParameter("p1","p1value")
,new SqlParameter("p2","p2value")
};
DbConnection connection = null;
DbTransaction transaction = null;
try
{
connection = Factory.CreateConnection();
connection.Open();
transaction = connection.BeginTransaction();
int resultInt1 = Execute.SExecuteNonQuery(connection, transaction, "sp_name1", paras);
int resultInt2 = Execute.SExecuteNonQuery(connection, transaction, "insert into tablename (...) values (...)", null);
if (resultInt1 > 0 && resultInt2 > 0)
{
transaction.Commit();
resultBool = true;
}
else
{
transaction.Rollback();
}
}
catch (Exception)
{
if (transaction != null)
{
transaction.Rollback();
}
}
finally
{
if (transaction != null)
{
transaction.Dispose();
}
if (connection != null)
{
//这里需要手动关闭连接!!
connection.Close();
connection.Dispose();
}
}
return resultBool;
}
/// <summary>
/// 执行同连接多任务操作(不使用事务)
/// 这里我们使用对象方法。这样执行多任务操作可能会稳定点和效率高点
/// </summary>
/// <returns></returns>
public void Insert_much()
{
Execute exec = Execute.NewExecute;
DbConnection connection = null;
try
{
connection = Factory.CreateConnection();
exec.ExecuteNonQuery(connection, null, "sp_name", null);
exec.ExecuteNonQuery(connection, null, "sp_name2", null);
}
finally
{
if (connection != null)
{
//因为调用了 带事务的那个方法(但是我们设置事务为NULL,事务无效)
//所以连接不会自动关闭释放,我们需要手动释放
connection.Close();
connection.Dispose();
}
}
}
}

Dam: Dam.rar
有兴趣的可以看看:) 内部有帮助文档。

(0)

相关推荐

  • DAM 简单跨数据库ADO.NET组件

    它的特点: 在您保证SQL语句兼容的前提下,透过它来访问数据库时,在不需要改变DAL层一点代码的前提下,只要修改一下配置文件,它便可以为你跨不同类型的数据库. 让你的DAL层代码更见简练.它会根据配置文件配置的连接信息,自动为你创建数据库连接,执行操作.关闭连接,释放连接等. 让DAL层的不同模块访问不同类型或不同数据库更加方便. 不错的执行效率,它基于原生ADO.NET.只会反射一次访问不同数据库的ADO提供者的程序集(DAM最终都是通过这些提供者来实现访问不同类型数据库的). 它的配置: 复

  • 读取纯真IP数据库的公用组件接口QQWry.NET

    这是一个读取纯真IP数据库的公用组件接口,我是通过luma的<纯真IP数据库格式详解>了解了纯真IP数据库数据格式,并且基于网络上的一个IPLocation.dll源码的基础改编而来.我为什么要改编这个组件呢?因为我看到这个组件在使用过程中,每次都要打开文件流,并且整个接口使用静态的属性.并不适合Web环境下,多线程并发查询的需求,并且在性能上也不是最优.有了luma的格式详解,和现有的IPLocation.dll的源码,使我的工作变得异常的简单.出现的一个小错误,也是经过一次调试后就解决了.

  • 跨数据库实现数据交流

    通常情况下,我们的CRUD操作都在单一数据库中进行.但是,也可能会遇到需要进行跨数据交流的情况.对此,我以跨数据库进行表的访问为例,稍微总结了下. 一.同SQL SERVER 这个最简单.直接在表名前加上"[数据库名]."就可以了. 例: SELECT * FROM [DestinationDBName].dbo.DestinationTableName 二.跨SQL SERVER 主要介绍两种方法: (一)通过链接服务器 1.先执行系统存储过程 sp_addlinkedserver

  • C/C++ Qt 数据库与TreeView组件绑定详解

    在上一篇博文<C/C++ Qt 数据库QSql增删改查组件应用>介绍了Qt中如何使用SQL操作函数,并实现了对数据库的增删改查等基本功能,从本篇开始将实现数据库与View组件的绑定,通过数据库与组件关联可实现动态展示数据库中的表记录. 我们先以TreeView组件为例,简单介绍一下如何实现组件与数据的绑定,首先我们需要创建一个表并插入几条测试记录,运行如下代码实现建库建表. #include <QSqlDatabase> #include <QSqlError> #in

  • 跨端开发框架avm组件封装经验分享

    目录 引言 1. 组件的定义和引用: 1.1 使用stml定义一个组件 / 页面 1.2 组件引用: 2. 向子组件传值 2.1 在其它页面使用子组件时传递静态值: 2.2 通过数据绑定传递动态值: 3. 监听子组件事件** 4.  声网组件实例 引言 avm.js 是一个跨端开发框架,AVM(Application-View-Model)前端组件化开发模式基于标准Web Components组件化思想,提供包含虚拟DOM和Runtime的编程框架avm.js以及多端统一编译工具,完全兼容Web

  • asp.net实现的MVC跨数据库多表联合动态条件查询功能示例

    本文实例讲述了asp.net实现的MVC跨数据库多表联合动态条件查询功能.分享给大家供大家参考,具体如下: 一.控制器中方法 [HttpGet] public ActionResult Search() { ViewBag.HeadTitle = "搜索"; ViewBag.MetaKey = "\"123\""; ViewBag.MetaDes = "\"456\""; string whereText

  • Django+mysql配置与简单操作数据库实例代码

     第一步:下载mysql驱动 cmd进入创建好的django项目目录:使用命令 pip install mysqlclient 等待安装成功! 第二步:在settings.py中配置mysql连接参数(没有mysql的先装mysql) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '数据库名(你得先在mysql中创建数据库)', 'USER':'mysql用户名(如root)', 'PASSWOR

  • Bootstrap Tree View简单而优雅的树结构组件实例解析

    A simple and elegant solution to displaying hierarchical tree structures (i.e. a Tree View) while leveraging the best that Twitter Bootstrap has to offer. 这是Bootstrap Tree View在git上的简介. 注意simple.elegant,简单而优雅,我喜欢这两个词. 那么今天的实例是通过Bootstrap Tree View来制作

  • MySQL中使用FREDATED引擎实现跨数据库服务器、跨实例访问

    跨数据库服务器,跨实例访问是比较常见的一种访问方式,在Oracle中可以通过DB LINK的方式来实现.对于MySQL而言,有一个FEDERATED存储引擎与之相对应.同样也是通过创建一个链接方式的形式来访问远程服务器上的数据.本文简要描述了FEDERATED存储引擎,以及演示了基于FEDERATED存储引擎跨实例访问的示例. 1.FEDERATED存储引擎的描述 FEDERATED存储引擎允许在不使用复制或集群技术的情况下实现远程访问数据库   创建基于FEDERATED存储引擎表的时候,服务

  • WPF简单的数据库查询实例

     做一个简单WPF连接数据库的 控件类型和名称: DataGrid:dataGrid         Button1  :Button1             Button    :Button2              TextBox :txtuserName 在引用App.config写数据库的连接字符串 <?xml version="1.0" encoding="utf-8" ?> <configuration> <start

随机推荐