65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.73/5 (30投票s)

2011年2月15日

公共领域

5分钟阅读

viewsIcon

186437

downloadIcon

20750

DALC4NET 是为 Microsoft .NET 项目构建的开源数据访问层。它使我们能够访问 SQL Server、Oracle、MySQL、MS Access 和 MS Excel 等数据库中的数据。

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 数据库,请按照以下步骤操作

  1. 单击此处下载适用于 .NET 的 MySQL Connector。
  2. 安装下载的 MySQL Connector。这将把 MySql.Data 程序集安装到您的 GAC(全局程序集缓存)中。
  3. 在您的 App.config/ Web.config 文件中添加以下行,以指示新安装程序集的版本和公钥标记。
  4. <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>
  5. 使用适用于 .NET 的 MySQL Connector 的正确 Version PublicKeyToken (修改突出显示的属性)。
  6. 要了解 .NET 程序集的 Version PublicKeyToken ,您可以转到开始 -> 运行 -> 输入 assembly,然后按 Enter 键。搜索程序集 MySql.Data 并右键单击它。将打开一个新窗口;复制 Version PublicKeyToken ,并在您的 config 文件中使用这些值。

2. 各种提供程序

数据库 要使用的提供程序

Microsoft SQL Server

System.Data.SqlClient

Oracle

System.Data.OracleClient

MySQL

MySql.Data.MySqlClient

Microsoft Access / Microsoft Excel

System.Data.OleDb

Microsoft Access / Microsoft Excel

System.Data.Odbc

3. 如何使用 DALC4NET?

  1. https://codeproject.org.cn/dalc4net/ 下载 DALC4NET.dll
  2. 向您的项目添加对 DALC4NET.dll 的引用
  3. 导入 DALC4NET 命名空间(例如,using DALC4NET;
  4. 创建 DALC4NET 库的 DBHelper 类的一个实例;该类便于执行任何类型的 SQL 命令或存储过程

DBHelper 是一个单例类,因此我们看不到 DBHelper 类的任何构造函数(单例类有一个 private 构造函数)。可以使用 GetInstance() 方法来创建类的实例。GetInstance() 方法有三个重载

  1. 无参数
  2. private DBHelper _dbHelper = new DBHelper();

    此实例不需要参数。此重载为作为默认连接提及的连接字符串名称创建连接。

    注意:要使用此重载,请添加一个 appSettings 键“defaultConnection",并将您的适当连接名称设置为此键的值。这是最推荐的重载,因为您无需进行任何代码更改即可切换到不同的数据库。例如,假设一个应用程序有三个数据库:Microsoft SQL Server、Oracle 和 MySQL。在 app/web.config 文件的 connectionString 部分创建三个连接字符串,例如 sqlConoracleConmySqlCon。如果希望应用程序使用 SQL Server,请将 appSettingkey="defaultConnection"value="sqlCon" 设置为。将来,如果您的客户希望使用 Oracle 数据库,那么在移植 Oracle 数据库后,您只需更改 defaultConnection 的值:value = “oracleCon"

  3. 带连接名称参数
  4. private DBHelper _dbHelper = new DBHelper("sqlCon");

    此重载为 app/web.config 文件中指定的连接名称创建实例。

  5. 带连接字符串和提供程序名称参数
  6. 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 类:DBHelperDBParameterDBParameterCollection

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.SqlClientSystem.Data.OracleClient 等。根据连接字符串中指定的提供程序名称,加载并实例化适当的程序集或类型。

6. DALC4NET 帮助

使用 DALC4NET 测试工具查看 SQL 命令/存储过程的执行情况。您可以在此处找到执行各种 SQL 命令/存储过程的示例以及它们的结果用途。

要使用 DALC4NET 测试应用程序

  1. 下载适当的数据库备份(SQL Server/ MySQL)
  2. 将备份还原为名称 DALC4NET_DB

现在您可以尝试示例代码了

本次更新的更改

最初,DALC4NET 库是使用单例设计模式实现的,该模式存在一些限制,例如:您不能同时连接到多个数据库。例如:假设您有一个场景,您想从 Excel 文件读取数据,并将这些数据插入到 SQL Server 数据库中。在这种情况下,您需要与两个数据库进行交互,即 Excel(用于读取数据)和 SQL Server(用于插入数据)。如果使用了单例模式,那么要实现上述场景是不可能的。现在用户可以同时与任意数量的数据库进行交互。

© . All rights reserved.