源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
楼主: ttx9n

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

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2011-1-31 20:47:28 | 显示全部楼层 |阅读模式
这是一个可以实现简单跨数据库基于ADO.NET的组件。您可以在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: Dam.rar
有兴趣的可以看看:) 内部有帮助文档。
回复

使用道具 举报

6

主题

2万

回帖

247

积分

中级会员

Rank: 3Rank: 3

积分
247
发表于 2022-8-17 11:25:42 | 显示全部楼层
的谁vdvdsvdsvdsdsv
回复 支持 反对

使用道具 举报

9

主题

2万

回帖

420

积分

中级会员

Rank: 3Rank: 3

积分
420
发表于 2022-9-23 15:47:04 | 显示全部楼层
哈哈哈哈哈哈哈
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

68

积分

注册会员

Rank: 2

积分
68
发表于 2022-10-4 17:41:47 | 显示全部楼层
非常vbcbvcvbvcb
回复 支持 反对

使用道具 举报

3

主题

2万

回帖

163

积分

注册会员

Rank: 2

积分
163
发表于 2022-11-1 05:33:16 | 显示全部楼层
hi哦和烦恼农家女
TS人妖演出表演服务q3268336102电话13168842816
回复 支持 反对

使用道具 举报

2

主题

2万

回帖

67

积分

注册会员

Rank: 2

积分
67
发表于 2022-11-30 01:45:16 | 显示全部楼层
来看看怎么样
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

100

积分

注册会员

Rank: 2

积分
100
发表于 2023-4-2 07:55:28 | 显示全部楼层
看到这帖子真是高兴!
回复 支持 反对

使用道具 举报

4

主题

2万

回帖

107

积分

注册会员

Rank: 2

积分
107
发表于 2023-8-27 08:53:26 | 显示全部楼层
啦啦啦啦啦啦哈哈哈
回复 支持 反对

使用道具 举报

3

主题

2万

回帖

50

积分

注册会员

Rank: 2

积分
50
发表于 2023-9-15 11:11:06 | 显示全部楼层
天天源码社区www.tiantianym.com
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-10-10 09:11:43 | 显示全部楼层
554411515451555
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2025-2-2 16:50 , Processed in 0.069937 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表