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. 运行范例程序,范例程序的运行界面如下:
     
     
  • 相关阅读:
    JavaWeb--HttpSession案例
    codeforces B. Balls Game 解题报告
    hdu 1711 Number Sequence 解题报告
    codeforces B. Online Meeting 解题报告
    ZOJ 3706 Break Standard Weight 解题报告
    codeforces C. Magic Formulas 解题报告
    codeforces B. Sereja and Mirroring 解题报告
    zoj 1109 Language of FatMouse 解题报告
    hdu 1361.Parencodings 解题报告
    hdu 1004 Let the Balloon Rise 解题报告
  • 原文地址:https://www.cnblogs.com/maocs/p/1686184.html
Copyright © 2011-2022 走看看