zoukankan      html  css  js  c++  java
  • Enterprise Library – Data Access Application Block Part 2

      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)等等,对企业应用开发非常有帮助,也非常实用。
     

     
    相关下载信息:
     
     
    本文根据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
    本范例程序的配置文件已经建立的,不过,可以检查一下数据库连接是否需要修改:
    <?xmlversion="1.0"encoding="utf-8"?>
    <configuration>
     <configSections>
        <sectionname="dataConfiguration"type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
     </configSections>
     <dataConfigurationdefaultDatabase="QuickStarts Instance" />
     <connectionStrings>
        <addname="QuickStarts Instance"connectionString="Database=EntLibQuickStarts;Server=(local);Integrated Security=SSPI;"
          providerName="System.Data.SqlClient" />
     </connectionStrings>
    </configuration>
     
    4. 运行范例程序,范例程序的运行界面如下:
     
     
  • 相关阅读:
    Windows Server 2003 SP2(32位) 中文版 下载地址 光盘整合方法
    用Recycle()方法对Java对象的重要性
    Lotus中千奇百怪的 $$
    Developing a simple application using steps "User Decision" and "Mail"(1) 沧海
    沟通中的情绪管理(演讲稿) 沧海
    人只有在压力之下,才可能成功,没做一件事,都必须成功,不许言败 沧海
    什么是IDOC,以及IDOC的步骤 沧海
    VS2008 Professional Edition CHS中的deffactory.dat读取错误 沧海
    Including custom text in the step "User Decision" 沧海
    SAP Upgrade Strategy 沧海
  • 原文地址:https://www.cnblogs.com/maocs/p/1686184.html
Copyright © 2011-2022 走看看