手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >DAM 简单跨数据库ADO.NET组件
DAM 简单跨数据库ADO.NET组件
摘要:它的特点:在您保证SQL语句兼容的前提下,透过它来访问数据库时,在不需要改变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

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

【DAM 简单跨数据库ADO.NET组件】相关文章:

ASP.NET实现的简单易用文件上传类

asp.net网络数据库开发实例精解 源文件

asp.net Xml绑定到数据控件的具体实现

asp.net 票据简单应用

net操作access数据库示例分享

ASP.NET 2.0下的条件编译

注册表中存储数据库链接字符串的方法

c#将Excel数据导入到数据库的实现代码

.NET 数据库连接池

ASP.Net 图片存入数据库的实现代码

精品推荐
分类导航