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

 

相關文章
相關標籤/搜索