视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
DAM 简单跨数据库ADO.NET组件
2020-11-27 22:42:56 责编:小采
文档

它的特点:

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

下载本文
显示全文
专题