使用 Microsoft Enterprise Library 数据访问应用程序块 – 第 I 部分
使用 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
在事务完成后关闭并释放用于数据库事务的相关对象,因此无需显式关闭数据库连接。
结论
到目前为止,您应该能够理解使用 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。