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");

 

相关文章
相关标签/搜索