当前位置: 移动技术网 > IT编程>开发语言>.net > DAM 简单跨数据库ADO.NET组件

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

2017年12月12日  | 移动技术网IT编程  | 我要评论
它的特点: 在您保证sql语句兼容的前提下,透过它来访问数据库时,在不需要改变dal层一点代码的前提下,只要修改一下配置文件,它便可以为你跨不同类型的数据库。 让你的dal
它的特点:

在您保证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:
有兴趣的可以看看:) 内部有帮助文档。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网