DALC4NET:.NET 的通用数据访问层






4.73/5 (30投票s)
DALC4NET 是为 Microsoft .NET 项目构建的开源数据访问层。它使我们能够访问 SQL Server、Oracle、MySQL、MS Access 和 MS Excel 等数据库中的数据。
- 下载源代码和演示 - 90.72 KB
- 下载已编译的 DALC4NET 库 - 6.44 KB
- 下载示例 SQL Server 数据库 - 144 KB
- 下载示例 MySQL 数据库 - 1.28 KB
1. 引言
DALC4NET 是为 Microsoft .NET 项目构建的开源数据访问层。它使我们能够访问 SQL Server、Oracle、MySQL、Microsoft Access 和 Microsoft Excel 等数据库中的数据。DALC4NET 是使用 C#.NET 开发的。使用 DALC4NET 需要 Microsoft .NET Framework 2.0。用户可以根据自己的需求自由修改源代码。如有任何反馈/建议,请通过电子邮件发送给作者:ak.tripathi@yahoo.com。
注意:要连接到 MySQL 数据库,请按照以下步骤操作
- 单击此处下载适用于 .NET 的 MySQL Connector。
- 安装下载的 MySQL Connector。这将把
MySql.Data
程序集安装到您的 GAC(全局程序集缓存)中。 - 在您的 App.config/ Web.config 文件中添加以下行,以指示新安装程序集的版本和公钥标记。
- 使用适用于 .NET 的 MySQL Connector 的正确
Version
和PublicKeyToken
(修改突出显示的属性)。 - 要了解 .NET 程序集的
Version
和PublicKeyToken
,您可以转到开始 -> 运行 -> 输入 assembly,然后按 Enter 键。搜索程序集 MySql.Data 并右键单击它。将打开一个新窗口;复制Version
和PublicKeyToken
,并在您的 config 文件中使用这些值。
<system.data>
<DbProviderFactories>
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient"
description=".Net Framework Data Provider for MySQL"
type="MySql.Data.MySqlClient.MySqlClientFactory,
MySql.Data,Version=6.0.3.0,
Culture=neutral,PublicKeyToken=c5687fc88969c44d"/>
</DbProviderFactories>
</system.data>
2. 各种提供程序
数据库 | 要使用的提供程序 |
Microsoft SQL Server |
|
Oracle |
|
MySQL |
|
Microsoft Access / Microsoft Excel |
|
Microsoft Access / Microsoft Excel |
|
3. 如何使用 DALC4NET?
- 从 https://codeproject.org.cn/dalc4net/ 下载 DALC4NET.dll
- 向您的项目添加对 DALC4NET.dll 的引用
- 导入
DALC4NET
命名空间(例如,using DALC4NET;
) - 创建
DALC4NET
库的DBHelper
类的一个实例;该类便于执行任何类型的 SQL 命令或存储过程
DBHelper
是一个单例类,因此我们看不到 DBHelper
类的任何构造函数(单例类有一个 private
构造函数)。可以使用 GetInstance()
方法来创建类的实例。GetInstance()
方法有三个重载
- 无参数
- 带连接名称参数
- 带连接字符串和提供程序名称参数
private DBHelper _dbHelper = new DBHelper();
此实例不需要参数。此重载为作为默认连接提及的连接字符串名称创建连接。
注意:要使用此重载,请添加一个 appSettings
键“defaultConnection
",并将您的适当连接名称设置为此键的值。这是最推荐的重载,因为您无需进行任何代码更改即可切换到不同的数据库。例如,假设一个应用程序有三个数据库:Microsoft SQL Server、Oracle 和 MySQL。在 app/web.config 文件的 connectionString
部分创建三个连接字符串,例如 sqlCon
、oracleCon
、mySqlCon
。如果希望应用程序使用 SQL Server,请将 appSetting
的 key="defaultConnection"
的 value="sqlCon"
设置为。将来,如果您的客户希望使用 Oracle 数据库,那么在移植 Oracle 数据库后,您只需更改 defaultConnection
的值:value = “oracleCon"
。
private DBHelper _dbHelper = new DBHelper("sqlCon");
此重载为 app/web.config 文件中指定的连接名称创建实例。
private DBHelper _dbHelper = new DBHelper("Server=1.1.1.1;
Initial Catalog=SOME_DB_NAME;UserId=sa;Password=sa;",
"System.Data.SqlClient");
此重载为指定的连接字符串和提供程序名称创建实例。
4. 如何执行 SQL 命令/存储过程
在第 2 节中,我们创建了 DBHelper
类的实例 _dbHelper
。现在我们可以像这样执行任何 SQL 命令
4.1 执行 SQL 命令
string sqlCommand = "SELECT Count(1) FROM USERDETAILS";
object objCont = _dbHelper.ExecuteScalar(sqlCommand);
4.2 执行带参数的存储过程
object objCont = _dbHelper.ExecuteScalar("PROC_DALC4NET_EXECUTE_SCALAR_SINGLE_PARAM",
new DBParameter("@FIRSTNAME", "ashish"),
CommandType.StoredProcedure);
4.3 使用事务执行带多个参数的存储过程
int rowsAffected = 0;
DBParameter param1 = new DBParameter("@FIRSTNAME", "Yash");
DBParameter param2 = new DBParameter("@LASTNAME", "Tripathi");
DBParameter param3 = new DBParameter("@EMAIL", "yash.tripathi@yahoo.com");
DBParameterCollection paramCollection = new DBParameterCollection();
paramCollection.Add(param1);
paramCollection.Add(param2);
paramCollection.Add(param3);
IDbTransaction transaction = _dbHelper.BeginTransaction();
try
{
rowsAffected = _dbHelper.ExecuteNonQuery
("PROC_DALC4NET_EXECUTE_NON_QUERY_STORED_PROC_MULTIPLE_PARAM",
paramCollection, transaction, CommandType.StoredProcedure);
message = rowsAffected > 0 ? "Record inserted successfully." :
"Error in inserting record.";
_dbHelper.CommitTransaction(transaction);
}
catch (Exception err)
{
_dbHelper.RollbackTransaction(transaction);
}
以类似的方式,我们可以使用适当的方法和重载来执行 SQL 命令或存储过程。
5. DALC4NET 设计概述
DALC4NET 主要实现提供程序和工厂模式,以使该库能够连接到任何类型的数据库。DALC4NET 只有三个 public
类:DBHelper
、DBParameter
和 DBParameterCollection
。
5.1 DBHelper 类
DBHelper
是一个 public
类,它允许用户通过三个 public
构造函数与数据库进行通信。
#region "Constructor Methods"
/// <summary>
/// This Constructor creates instance of the class for defaultConnection
/// </summary>
public DBHelper()
{
//SOME CODE HERE...
}
/// <summary>
/// This constructor should be used for creation of the instance
/// for the specified app settings connection name
/// </summary>
/// <param name="connectionName">App Setting's connection name</param>
public DBHelper(string connectionName)
{
//SOME CODE HERE...
}
/// <summary>
/// Constructor creates instance of the class for the specified connection
/// string and provider name
/// </summary>
/// <param name="connectionString">Connection String</param>
/// <param name="providerName">Provider name</param>
public DBHelper(string connectionString, string providerName)
{
//SOME CODE HERE...
}
#endregion
5.2 AssemblyProvider 类
AssemblyProvider
类实现并使用工厂设计模式,从提供程序名称获取适当的提供程序类型。
internal DbProviderFactory Factory
{
get
{
DbProviderFactory factory = DbProviderFactories.GetFactory(_providerName);
return factory;
}
}
5.2 提供程序模式实现
DALC4NET 实现提供程序设计模式。代码中任何地方都不会引用任何特定的连接器,例如 System.Data.SqlClient
或 System.Data.OracleClient
等。根据连接字符串中指定的提供程序名称,加载并实例化适当的程序集或类型。
6. DALC4NET 帮助
使用 DALC4NET 测试工具查看 SQL 命令/存储过程的执行情况。您可以在此处找到执行各种 SQL 命令/存储过程的示例以及它们的结果用途。
要使用 DALC4NET 测试应用程序
- 下载适当的数据库备份(SQL Server/ MySQL)
- 将备份还原为名称
DALC4NET_DB
现在您可以尝试示例代码了
本次更新的更改
最初,DALC4NET
库是使用单例设计模式实现的,该模式存在一些限制,例如:您不能同时连接到多个数据库。例如:假设您有一个场景,您想从 Excel 文件读取数据,并将这些数据插入到 SQL Server 数据库中。在这种情况下,您需要与两个数据库进行交互,即 Excel(用于读取数据)和 SQL Server(用于插入数据)。如果使用了单例模式,那么要实现上述场景是不可能的。现在用户可以同时与任意数量的数据库进行交互。