C#資料庫開發讀書筆記2---DataAdapter、DataSet的使用

來源:互聯網
上載者:User

標籤:c#、ado.net

6、DataAdapter的使用

    .NET架構通過 DataAdapter 來控制與現有資料來源的互動,每個 .NET 資料提供者都包含一個 DataAdapter對象;OLE DB .NET 資料提供者包含一個 OLEDBDataAdapter 對象,

 而 SQL Server .NET 資料提供者包含一個 SqlDataAdapter 對象。

 DataAdapter 對象用於從資料來源中檢索資料並填充 DataSet 中的表,並且還會將對 DataSet 作出的更改解析回資料來源。

 DataAdapter 使用 .NET 資料提供者的 Connection 來串連到資料來源,使用 Command 對象從資料來源中檢索資料並將更改解析回資料來源。

 

 6.1、使用DataAdapter填充DataSet


     DataAdapter 的 SelectCommand 屬性是一個 Command 對象,它從資料來源中檢索資料。DataAdapter 的InsertCommand、UpdateCommand和DeleteCommand屬性也是 Command 對象,

  它們按照對 DataSet 中資料的修改來管理對資料來源中資料的更新。

  DataAdapter 的Fill方法用於使用 DataAdapter 的SelectCommand 的結果來填充 DataSet。Fill將要填充的DataSet和DataTable對象用作它的參數。

  如果資料來源中存在主鍵且 DataAdapter.MissingSchemaAction設定為MissingSchemaAction.AddWithKey,否則不會建立主鍵。

 

  6.1.1、代碼:

      SqlConnection nwindConn = new SqlConnection("……");

   SqlCommand selectCMD = new SqlCommand("SELECT CustomerID, CompanyName FROM Customer", nwindConn);

   selectCMD.CommandTimeout = 30;

   SqlDataAdapter custDA = new SqlDataAdapter();

   custDA.SelectCommand = selectCMD;

   nwindConn.Open();

   DataSet custDS = new DataSet();

   custDA.Fill(custDS, "Customers");

   nwindConn.Close();

   

   OleDbConnection nwindConn = new OleDbConnection("……");

   OleDbCommand selectCMD = new OleDbCommand("SELECT CustomerID, CompanyName FROM Customers", nwindConn);

   selectCMD.CommandTimeout = 30;

   OleDbDataAdapter custDA = new OleDbDataAdapter();

   custDA.SelectCommand = selectCMD;

   DataSet custDS = new DataSet();

   custDA.Fill(custDS, "Customers");

   //這段代碼沒有顯示的開啟和關閉 Connection 如果Fill方法發現串連尚未開啟,它將隱式的開啟並關閉 Connection

   

   6.1.2、多個結果集

       如果 DdataAdapter 遇到多個結果集,它將在 DataSet 中建立多個表。將向這些表提供遞增的預設名稱 TableN,

    以表示 Table() 的Table為第一個表名。如果以參數形式向Fill方法傳遞表名稱,則將向這些表提供遞增的預設名稱 TableNameN,

    這些表名稱以表示TableName() 的 TableName為起始。

   

   6.1.2、從多個 DataAdapter 填充 DataSet

       可以將任意數量的DataAdapter與一個DataSet一起使用。每個DataAdapter都可用於填充一個或多個DataTable對象並將更新解析回相關資料來源。

    //下面程式碼範例從 Microsoft SQL Server 2000上的Northwind資料庫填充客戶列表,從儲存在 Microsoft Access 2000 中的Northwind資料庫填充訂單列表。

   

    using System;

    using System.Data;

    using System.Data.SqlClient;

    using System.Data.OleDb;

   

    class DoubleAdapter

    {

     public static void Main()

     {

      SqlConnection custConn = new SqlConnection("……");

      SqlDataAdapter custDA = new SqlDataAdapter("SELECT * FROM Customers", custConn);

     

      OleDbConnection orderConn = new OleDbConnection("……");

      OleDbDataAdapter orderDA = new OleDbDataAdapter("SELECT * FROM Orders", orderConn);

     

      custConn.Open();

      orderConn.Open();

     

      DataSet custDS = new DataSet();

     

      //填充資料集

      custDA.Fill(custDS, "Customers");

      orderDA.Fill(custDS, "Orders");

     

      //關閉串連

      custConn.Close();

      orderConn.Close();

     

      DataRelation custOrderRel = custDS.Relations.Add("Customers",

      custDS.Tables["Customers"].Columns["CustomerID"],

      custDS.Tables["Orders"].Columns["OrderID"]);

     

      foreach (DataRow pRow in custDS.Tables["Customers"].Rows)

      {

       Console.WriteLine(pRow["CustomerID"]);

       foreach (DataRow cRow in pRow.GetChildRows(custOrderRel))

       {

        Console.WriteLine("\t" + cRow["OrderID"])

       }

      }

     }

    }

   

 6.2、使用DataAdapter、DataSet更新資料庫

     DataAdapter 的 Update 方法可調用來將 DataSet中的更改解析回資料來源。與Fill方法類似,

     Update方法將DataSet執行個體和可選DataTable對象或DataTable名稱用作參數。

     DataSet執行個體是包含已作出的更改的DataSet,而D啊他Table標識從其中檢索更改的表。

        當調用Update方法時,DataAdapter將分析已作出的更改並執行相應的命令(INSERT、UPDATE、DELETE)。

        當DataAdapter遇到對DataRow的更改時,它將使用InsertCommand、UpdateCommand、DeleteCommand來處理該更改。

        當不存在用於已刪除行的DeleteCommand或其他命令,將引發異常。

       

        6.2.1、使用DataAdapter參數

            DataAdapter的Command參數可用於為DataSet中每個已修改行的SQL語句或預存程序指定輸入和輸出的值。

            在調用DataAdapter的Update方法之前,必須設定InsertCommand、UpdateCommand或DeleteCommand屬性。

   //範例程式碼:

       custDA.Parameters.Add("@CompanyName", SqlDbType.NChar, 15, "CompanyName");

    SqlParameter myParm = custDA.UpdateCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");

    myParm.SourceVersion = DataRowVersion.Original;

   

    Parameters集合的Add方法採用參數的名稱、DataAdapter特定類型、大小(如果可應用於該類型)以及 DataTable中SourceColumn

    的名稱。請注意,@CustomerID參數的SourceVersion設定為Original。這樣,如果識別欄位的值已經在修改後的DataRow中被更改,

    就一定會更新資料來源中的現有行。在這種情況下,Original行值將匹配資料來源中的當前值,而Current行值將包含更新的值。

    如果沒有為@CompanyName參數設定SourceVersion,而將使用預設的Current行值。


7、建立和使用DataSet

    7.1、DataSet涉及到的方法:

     在DataSet中以編程方式建立DataTables、DataRelations和Constraints並使用資料填充這些表。

  通過DataAdapter用現有關係資料來源中的資料表填充DataSet。

  使用XML載入和保持DataSet內容。


 7.2、建立DataSet

     預設參數為: "NewDataSet"

  //代碼:

  DataSet custDS = new DataSet("xxx");


 7.3、向DataSet添加DataTable

     ADO.NET可以建立DataTable對象並將其添加到現有的DataSet中。可以使用要添加到DataTable的Columns集合中的DataColumn對象的PromaryKey和Unique屬性來設定DataTable的約束資訊。

  //範例程式碼: 以下構造一個DataSet,將一個新的DataTabel對象添加到該DataSet中,然後將3個DataColumn對象添加到該表中,最後設定一個主鍵列。

  DataSet custDS = new DataSet("CustomerOrders");

  DataTable orderTable = custDS.Table.Add("Orders");

  //添加Column

  DataColumn pkCol = ordersTable.Columns.Add("OrderID", typeof(Int32));

  ordersTable.Columns.Add("OrderQuantity", typeof(Int32));

  ordersTable.Columns.Add("CompanyName", typeof(string));

  //添加主鍵

  orderTable.PrimaryKey = new DataColumn[]{pkCol};


 7.4、添加表關係DataRelation

     在包含多個DataTable對象的DataSet中,可以使用DataRelation對象來使一個表與另一個表相關,在多個表之間導航,

  以及從相關表中返回子行或父行。

 

  建立DataRelation所需的參數是DataRelation的名稱以及用作關係中父列和子列的一個或多個DataColumn引用的數組。

  當建立DataRelation後,可以使用它在多個表之間導航和檢索值。預設情況下,向DataSet中添加DataRelation會將一個

  UniqueConstraint添加到父表中,並將一個ForeignKeyConstraint添加到子表中。

 

  //一下程式碼範例使用DataSet中的兩個DataTable對象來建立一個DataRelation。每個DataTable包含一個名為CustID的列,它用作兩個DataTable對象之間的連結。

  //每個DataTable包含一個名為CustID的列,它用作兩個DataTable對象之間的連結。

  //該樣本中的第一個參數所建立的DataRelation的名稱。第二個參數設定父DataColumn,第三個參數設定子DataColumn。

  custDS.Relations.Add("CustOrders", custDS.Tables["Customers"].Columns["CustID"]),

  custDS.Tables["Orders"].Columns["CustID"]);


本文出自 “八部天龍” 部落格,請務必保留此出處http://1224517743.blog.51cto.com/2643474/1610232

C#資料庫開發讀書筆記2---DataAdapter、DataSet的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.