zoukankan      html  css  js  c++  java
  • ADO.NET 快速入门(五):从 DataSet 更新数据库

    该主题说明了如何使用 DataSet 在数据库中更新数据。你依然可以直接使用 SqlCommand 在数据库中插入、更新、和删除数据,记住这一点也很重要。理解“从数据库填充DataSet”涵盖的概念有助于你理解这个主题。
     
     
    前一篇“从数据库填充 DataSet”涵盖的部分主题包括从数据库检索数据和填充到 DataSet,以及 DataSet 怎样有别于数据库。一旦 DataSet 被加载,你可以修改数据,并且DataSet 会跟踪变化。
     
     
    DataSet 可以被认为是从数据库检索出的在内存中的缓存数据。DataSet 包含一组表、关系、和约束。示例1中演示如何使用 Add 方法在 DataTable 添加新数据到 DataSet。Add 方法要么接受预期数据列的数组,要么接受 DataRow 作为参数。
     
     
    示例1:
     
                SqlConnection myConnection = new SqlConnection("server=(local);Integrated Security=SSPI;database=northwind");
                SqlDataAdapter myDataAdapter = new SqlDataAdapter("SELECT * FROM Customers", myConnection);
    
                DataSet myDataSet = new DataSet();
                DataRow myDataRow;
    
                // 创建命令构建器,会自动创建更新命令,不必手动提供或创建。
                SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myDataAdapter);
    
                // 为 MissingSchemaAction 属性设置 AddWithKey,除非指定 AddWithKey,Fill 将不会检索到主键 & 唯一键信息。
                myDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
                myDataAdapter.Fill(myDataSet, "Customers");
    
                myDataRow = myDataSet.Tables["Customers"].NewRow();
                myDataRow["CustomerId"] = "NewID";
                myDataRow["ContactName"] = "New Name";
                myDataRow["CompanyName"] = "New Company Name";
                myDataSet.Tables["Customers"].Rows.Add(myDataRow);
    
                myDataAdapter.Update(myDataSet, "Customers");
     
    请记住,DataTable 必须通过 NewRow 方法返回 DataRow。NewRow 方法返回了与 DataTable 匹配架构的 DataRow 对象。直到新的 DataRow 被添加到 RowsCollection集合之前,它一直独立于这个表。
     
     
    可以通过 DataRow 改动数据。可以通过 Rows 属性的 RowsCollection 集合使用行索引,如示例2:
     
     
    示例2:
     
        myDataSet.Tables["Customers"].Rows[0]["ContactName"]="Peach";
     
    你也可以通过主键值访问一个特定行,如示例3:
     
     
    示例3:
     
        DataRow myDataRow1 = myDataSet.Tables["Customers"].Rows.Find("ALFKI");
        myDataRow1["ContactName"]="Peach";
     
    示例3中的 “ALFKI” 是 “Customers” 表中的主键 “CustomerID” 的值。当使用 SqlDataAdapter 时,主键是从库中建立的。即使没有使用库,你也可以通过 PrimaryKey 属性设置主键值。
     
     
    使用 Delete 方法移除行。请记住,发生在 DataSet 上的逻辑删除,只有在 DataSet 被更新到数据库时候才会被物理删除(示例4)。同样地,在行被保存的情况下,你可以使用 DataSet 的 RejectChanges 放弃更改。
     
     
    示例4:
     
        myDataSet.Tables["Customers"].Rows[0].Delete();
     
    行里维护着原始值和新值。原始值和新值皆可以允许被 RowChanging 事件访问,以便决定是否继续编辑。因为我们维护着原始值和新值,所以我们可以建立如乐观锁定和键值改变的场景。
     
     
    在提交更改回数据库之前,你需要设置 InsertCommand、UpdateCommand、和 DeleteCommand 命令使数据库的变动和 DataSet 一致。对于受限的场景,你可以使用 SqlCommandBuilder 构建器自动生成那些命令对象,如示例5:
     
     
    示例5:
     
        SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(mySqlDataAdapter);
     
    从 DataSet 提交数据到数据库,使用 SqlDataAdapter 的 Update 方法,如示例6:
     
     
    示例6:
     
        mySqlDataAdapter.Update(myDataSet, "Customers");
  • 相关阅读:
    memory addresses
    ddt ddl dml
    PHP Architecture
    disk_free_space
    SAPI
    Simple Mail Transfer Protocol
    AllowOverride None
    function &w(){}
    The History of Operating Systems
    are not called implicitly
  • 原文地址:https://www.cnblogs.com/JavCof/p/3431863.html
Copyright © 2011-2022 走看看