Enterprise Library – Data Access Application Block 学习手册(最新版)- Part 2

it2022-05-05  76

Enterprise Library for .Net Framework 3.5 – EntLib v4.1 是patterns & practices 小组为.NET Framework 3.5 开发一套企业库,目前最新版本为v4.1,共包括9个Application Block,包括数据访问(Data Access Application Block)、异常管理(Exception Handling Application Block)、数据验证(Validation Application Block)等等,对企业应用开发非常有帮助,也非常实用。     相关下载信息: http://blog.entlib.com/EntLib/archive/2009/03/30/enterprise-library-for-.net-framework-3.5-entlib-v4.1-v4.1.aspx   上一篇: Enterprise Library – Data Access Application Block 学习手册(最新版)- Part 1   本文根据EntLib v4.1 的学习手册(Hands on Lab),演示数据访问存储过程及更新数据记录。   在开始之前,先要执行如下的SQL 脚本,创建相关的数据表和存储过程:Enterprise Library 4.1 HOL\CS\Data Access\exercises\ex02\DbSetup 目录下的Categories.sql 和 HOLSPs.sql。   1. 下面就可以打开项目 \Enterprise Library 4.1 HOL\CS\Data Access \exercises \ex02 \begin \DataEx2.sln 开始我们的工作了。   打开MainForm.cs 代码文件,添加对Namespace的引用: using Microsoft.Practices.EnterpriseLibrary.Data;   同时在Form 中创建如下private Database变量: private Database _db = DatabaseFactory.CreateDatabase("QuickStarts Instance");   2. 编写代码 在MainForm_Load 方法编写如下代码,调用GetCategories 存储过程,返回DataReader 数据对象,在using 语句块结束后,自动释放数据库连接。         private void MainForm_Load(object sender, System.EventArgs e)         {             this.cmbCategory.Items.Clear();               using (IDataReader dataReader = _db.ExecuteReader("GetCategories"))             {                 // Processing code                 while (dataReader.Read())                 {                     Category item = new Category(                           dataReader.GetInt32(0),                           dataReader.GetString(1),                           dataReader.GetString(2));                     this.cmbCategory.Items.Add(item);                 }             }               if (this.cmbCategory.Items.Count > 0)                 this.cmbCategory.SelectedIndex = 0;         }   下面的方法实现在Category下来列表框改变时,同步更新DataGrid中的产品记录。         private void cmbCategory_SelectedIndexChanged(object sender, System.EventArgs e)         {             this.dsProducts.Clear();               Category selectedCategory = (Category) this.cmbCategory.SelectedItem;             if (selectedCategory == null)                 return;               _db.LoadDataSet("GetProductsByCategory",                 this.dsProducts,                 new string[] { "Products" },                 selectedCategory.CategoryId);         } Database类提供了2个方法填充DataSet,分别是ExecuteDataSet和LoadDataSet。ExecuteDataSet方法返回一个新创建的DataSet 对象;LoadDataSet则填充一个现有的DataSet对象。上述的LoadDataSet方法传入的第一个参数是GetProductsByCategory 存储过程的名称,第二个参数是待填充的DataSet变量,第三个参数是将存储过程返回的结果集映射到指定的一组表名,最后一个参数的传给存储过程的参数值,这里为CategoryID。   接下来实现更新的方法,btnSave_Click 方法代码如下: private void btnSave_Click(object sender, System.EventArgs e)         {             System.Data.Common.DbCommand insertCommand = null;             insertCommand = _db.GetStoredProcCommand("HOLAddProduct");             _db.AddInParameter(insertCommand, "ProductName",                 DbType.String, "ProductName", DataRowVersion.Current);             _db.AddInParameter(insertCommand, "CategoryID",                 DbType.Int32, "CategoryID", DataRowVersion.Current);             _db.AddInParameter(insertCommand, "UnitPrice",                 DbType.Currency, "UnitPrice", DataRowVersion.Current);               System.Data.Common.DbCommand deleteCommand = null;             deleteCommand = _db.GetStoredProcCommand("HOLDeleteProduct");             _db.AddInParameter(deleteCommand, "ProductID",                DbType.Int32, "ProductID", DataRowVersion.Current);             _db.AddInParameter(deleteCommand, "LastUpdate",                 DbType.DateTime, "LastUpdate", DataRowVersion.Original);               System.Data.Common.DbCommand updateCommand = null;             updateCommand = _db.GetStoredProcCommand("HOLUpdateProduct");             _db.AddInParameter(updateCommand, "ProductID",                DbType.Int32, "ProductID", DataRowVersion.Current);             _db.AddInParameter(updateCommand, "ProductName",                DbType.String, "ProductName", DataRowVersion.Current);             _db.AddInParameter(updateCommand, "CategoryID",                DbType.Int32, "CategoryID", DataRowVersion.Current);             _db.AddInParameter(updateCommand, "UnitPrice",                 DbType.Currency, "UnitPrice", DataRowVersion.Current);             _db.AddInParameter(updateCommand, "LastUpdate",                 DbType.DateTime, "LastUpdate", DataRowVersion.Current);               int rowsAffected = _db.UpdateDataSet(                 this.dsProducts,                 "Products",                 insertCommand,                 updateCommand,                 deleteCommand,                 UpdateBehavior.Standard);           } 在更新数据时,需要手动创建存储过程的外包层(Wrapper),建立数据表DataTable字段和存储过程参数的映射。Database类的UpdateDataSet这一方法比较少调用,这里不深入介绍了。   3. 检查配置文件app.config 本范例程序的配置文件已经建立的,不过,可以检查一下数据库连接是否需要修改: <? xml version = "1.0"encoding="utf-8"?> < configuration >  < configSections >     < section name = "dataConfiguration"type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />  </ configSections >  < dataConfiguration defaultDatabase = "QuickStarts Instance " />  < connectionStrings >     < add name = "QuickStarts Instance"connectionString="Database=EntLibQuickStarts;Server=(local);Integrated Security=SSPI;"       providerName = "System.Data.SqlClient" />  </ connectionStrings > </ configuration >   4. 运行范例程序,范例程序的运行界面如下:     欢迎继续访问后续内容。

转载于:https://www.cnblogs.com/vibratea/archive/2010/09/15/1826682.html

相关资源:各显卡算力对照表!

最新回复(0)