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

使用 Microsoft Enterprise Library 数据访问应用程序块 – 第 I 部分

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.29/5 (15投票s)

2009年8月5日

CPOL

4分钟阅读

viewsIcon

166194

downloadIcon

5976

使用 Microsoft Enterprise Library Data Access Application Block 将数据插入数据库。

引言

我一直在我的应用程序开发中使用各种 Microsoft Enterprise Library 应用程序块。任何应用程序最常见的任务是数据库事务。我使用了 Enterprise Library Data Access Application Block,发现它非常容易和简单地集成和使用。

Enterprise Library Data Access Application Block 简化了实现常见数据访问功能的开发任务。应用程序可以在各种情况下使用此应用程序块,例如读取用于显示的数据、通过应用程序层传递数据,以及将更改后的数据提交回数据库系统。应用程序块包括对存储过程和内联 SQL 的支持。

在本文中,让我分享如何集成和使用 Data Access Application Block 将数据插入数据库。

请注意,我使用了 Microsoft Enterprise Library 4.1 – 2008 年 10 月发布版。它适用于 .NET framework 3.5 和 Visual Studio 2008。您可以从以下 URL 下载 Microsoft Enterprise Library 4.1:http://www.microsoft.com/downloads/details.aspx?FamilyId=1643758B-2986-47F7-B529-3E41584B6CE5&displaylang=en

集成和使用

  • 代码:在随附的源代码中,我加入了数据访问层类、实体类、EventLog 类以及创建表和相关存储过程的 SQL 脚本。还有来自 Data Access Application Block 的相关程序集。代码用于保存用户信息(插入和更新)到数据库中。我将这些类放在同一个文件夹中,但它们来自不同的命名空间和程序集。将它们放在不同的命名空间和不同的程序集中是更好的做法。
  • 说明:首先,我们需要安装 Microsoft Enterprise Library 4.1 并获取程序集“Microsoft.Practices.EnterpriseLibrary.Common.dll”和“Microsoft.Practices.EnterpriseLibrary.Data.dll”,并在您的项目中添加对它们的引用。在随附的示例中,您将找到必要的 DLL,以防您不想下载并安装 Microsoft Enterprise Library 4.1。
  • User.cs:实体层类。此类用于在各个层之间传递用户数据。
  • UserDAC.cs:数据访问层类。此类使用实体类获取数据成员,并将它们传递给 Data Access Application Block 以插入数据库。它执行一个存储过程来保存用户信息(新用户或编辑用户)。一旦数据库事务完成,它会使用消息 ID 和消息字符串响应。对于成功的事务,消息 ID 始终是一个正数整数,包含新用户的新用户 ID 和修改用户的用户 ID。消息字符串将包含来自存储过程的事务消息。我使用静态消息用于演示目的,但它是可配置的。应该从业务层类调用此类,以便将数据保存到数据库中。业务层将传入存储用户信息的实体对象,并取回消息 ID 和消息字符串。User Data Access 类还将使用 EventLog 类将错误记录到应用程序事件日志中。
  • public void SaveUser(User vobjUser, out int vintMessageID, out string vstrMessage)
    {
        //Use the database connection string here...
        Database objDB = new SqlDatabase(ConnectionString);
        using (DbCommand objCMD = objDB.GetStoredProcCommand("sprocSample_SaveUser"))
        {
            objDB.AddInParameter(objCMD, "@intUserID", 
                                 DbType.Int32, vobjUser.UserID);
            objDB.AddInParameter(objCMD, "@strUserName", 
                                 DbType.String, vobjUser.UserName);
            objDB.AddInParameter(objCMD, "@strUserPassword", 
                                 DbType.String, vobjUser.UserPassword);
            objDB.AddInParameter(objCMD, "@strFirstName", 
                                 DbType.String, vobjUser.FirstName);
            objDB.AddInParameter(objCMD, "@strLastName", 
                                 DbType.String, vobjUser.LastName);
            objDB.AddOutParameter(objCMD, "@intErrID", 
                                  DbType.Int32, Int32.MaxValue);
            objDB.AddOutParameter(objCMD, "@strMessage", DbType.String, 255);
    
            try{
            objDB.ExecuteNonQuery(objCMD);
            vintMessageID = 
              Convert.ToInt32(objDB.GetParameterValue(objCMD, "@intErrID"));
            vstrMessage = objDB.GetParameterValue(objCMD, "@strMessage").ToString();
    
            vobjUser.UserID = vintMessageID > 0 ? vintMessageID : 0;
            }
            catch (Exception ex)
            {
                EventLog objLog = new EventLog();
                objLog.LogError(ex);
    
                throw ex;
            }
        }
    }

    上述方法通过调用过程“sprocSample_SaveUser”将用户保存到数据库中。关键字using 在事务完成后关闭并释放用于数据库事务的相关对象,因此无需显式关闭数据库连接。

  • EventLog.cs:框架/实用程序层类。此类用于将错误信息记录到系统的应用程序事件日志中。有关使用 Microsoft Enterprise Library Logging Application Block 的事件日志记录机制的详细信息,请参阅我的文章 使用 Microsoft Enterprise Library Logging Application Block
  • SQLScripts.sql:SQL 脚本,用于创建数据库表和示例中使用的存储过程。

结论

到目前为止,您应该能够理解使用 Enterprise Library 4.1 Application Blocks for Data Access 将数据保存到数据库是多么简单。我将发布更多关于 Data Access Application block 和分层架构的文章。

要详细了解 Microsoft Enterprise Library 4.1 Application Blocks,请参阅此 URL:http://msdn.microsoft.com/en-us/library/dd203099.aspx

© . All rights reserved.