1. 程式人生 > >ADO.Net中DataSet的應用(知識點描述、思維導圖、示例程式碼、效果截圖)

ADO.Net中DataSet的應用(知識點描述、思維導圖、示例程式碼、效果截圖)

一.知識點描述

ADO.NET是Microsoft公司推出的.NET框架中用於資料訪問的元件,ADO. NET是.Net FrameWork SDK 中用以操作資料庫的類庫的總稱。而DataSet 類則是ADO. NET中最核心的成員之一,也是各種開發基於.Net平臺程式語言開發資料庫應用程式最常接觸的類。之所以DataSet類在ADO. NET中具有特殊的地位,是因為DataSet在ADO. NET實現從資料庫抽取資料中起到關鍵作用,在從資料庫完成資料抽取後,DataSet 就是資料的存放地,它是各種資料來源中的資料在計算機記憶體中對映成的快取,所以有時說DataSet可以看成是一個數據容器。同時它在客戶端實現讀取、更新資料庫等過程中起到了中間部件的作用(Da taReader只能檢索資料庫中的資料)。本文針對ADO. NET中的DataSet, 談談本人在開發設計應用中的實踐和體會。

DataSet,這是從資料來源檢索資料的記憶體中快取是 ADO.NET 體系結構的主要元件。DataSet包含的集合DataTable物件,可以互相關聯起來與DataRelation物件。 此外可以強制實施中的資料完整性DataSet通過使用UniqueConstraint和ForeignKeyConstraint物件。

首先是在ADO.net中的關係:Connection_____Command____DataAdapter____Dataset  _____Datareader 

● DataSet 是放在記憶體中的,對DataSet中資料的修改並不直接反應到資料庫,要通過 DataAdapter 的 Update 方法更新回資料庫

● DataSet相當你用的資料庫; DataTable相當於你的表。一個 DataSet 可以包含多個 DataTable

 DataSet 由表、關係和約束的集合組成。

二.思維導圖

 

三.示例程式碼

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 SqlConnection sqlConnection =  new  SqlConnection();                                               //宣告並例項化SQL連線;              sqlConnection.ConnectionString =                  "Server=(local);Database=EduBaseDemo;Integrated Security=sspi" ;                              //在字串變數中,描述連線字串所需的伺服器地址、資料庫名稱、整合安全性(即是否使用Windows驗證);              SqlCommand sqlCommand =  new  SqlCommand();                                                        //宣告並例項化SQL命令;              sqlCommand.Connection = sqlConnection;                                                           //將SQL命令的連線屬性指向SQL連線;              sqlCommand.CommandText =                                                                         //指定SQL命令的命令文字;                  "SELECT * FROM tb_Department;"                                                               //該命令分別查詢所有院系、專業、班級,查詢結果將返回多張表;                  "SELECT * FROM tb_Major;"                  "SELECT * FROM tb_Class;" ;                                                        SqlDataAdapter sqlDataAdapter =  new  SqlDataAdapter();                                            //宣告並例項化SQL資料介面卡,同時藉助建構函式,將其SelectCommand屬性設為先前建立的SQL命令;              sqlDataAdapter.SelectCommand = sqlCommand;                                                       //將SQL資料介面卡的查詢命令屬性指向SQL命令;              DataSet dataSet =  new  DataSet();                                                                 //宣告並例項化資料集,用於儲存查得的多張表;              sqlConnection.Open();                                                                            //開啟SQL連線;              sqlDataAdapter.Fill(dataSet);                                                                    //SQL資料介面卡讀取資料,並填充資料集;              sqlConnection.Close();                                                                           //關閉SQL連線;              DataTable departmentTable = dataSet.Tables[0];                                                   //宣告院系資料表,對應資料集的表集合中的第1張資料表;              DataTable majorTable = dataSet.Tables[1];                                                        //宣告專業資料表,對應資料集的表集合中的第2張資料表;              DataTable classTable = dataSet.Tables[2];                                                        //宣告班級資料表,對應資料集的表集合中的第3張資料表;              DataRelation[] dataRelations =                                                                   //宣告資料關係陣列;              {                  new  DataRelation                                                                             //例項化資料關係,實現院系表、專業表之間的層次關係;                      ( "Department_Major"                                                                      //資料關係名稱;                      , departmentTable.Columns[ "No" ]                                                          //父表的被參照列為院系表的編號列;                      , majorTable.Columns[ "DepartmentNo" ]                                                     //子表的參照列為專業表的院系編號列;                      false )                                                                                 //不建立約束(父列上的唯一約束、子列上的外來鍵約束);                  new  DataRelation                                                                           //例項化資料關係,實現專業表、班級表之間的層次關係;                      ( "Major_Class"                                                                           //資料關係名稱;                      , majorTable.Columns[ "No" ]                                                               //父表的被參照列為專業表的編號列;                      , classTable.Columns[ "MajorNo" ]                                                          //子表的參照列為班級表的專業編號列;                      , false )                                                                                  //不建立約束(父列上的唯一約束、子列上的外來鍵約束);              };              dataSet.Relations.AddRange(dataRelations);                                                       //將資料關係陣列批量加入資料集的關係集合中;              this .trv_EducationUnit.Nodes.Clear();                                                            //樹形檢視的節點集合清空;              List<TreeNode> treeNodes =  new  List<TreeNode>();                                                 //宣告並例項化樹形節點列表;              foreach  (DataRow departmentRow  in  departmentTable.Rows)                                          //遍歷院系資料表中的每一資料行;              {                  TreeNode departmentNode =  new  TreeNode();                                                    //宣告並例項化院系節點,該節點對應當前某個院系;                  departmentNode.Text = departmentRow[ "Name" ].ToString();                                      //院系節點的文字設為當前院系的名稱;                  treeNodes.Add(departmentNode);                                                               //院系節點加入樹形節點列表,成為第0級節點之一;                  foreach  (DataRow majorRow  in  departmentRow.GetChildRows( "Department_Major" ))                 //藉助先前定義的資料關係,遍歷當前院系所在資料行的子行,即下屬所有專業;                  {                      TreeNode majorNode =  new  TreeNode();                                                     //宣告並例項化專業節點,該節點對應當前某個專業;                      majorNode.Text = majorRow[ "Name" ].ToString();                                            //專業節點的文字設為當前專業的名稱;                      departmentNode.Nodes.Add(majorNode);                                                     //專業節點加入當前院系節點的節點集合,成為第1級節點之一;                      foreach  (DataRow classRow  in  majorRow.GetChildRows( "Major_Class" ))                       //藉助先前定義的資料關係,遍歷當前專業所在資料行的子行,即下屬所有班級;                      {                          TreeNode classNode =  new  TreeNode();                                                 //宣告並例項化班級節點,該節點對應當前某個班級;                          classNode.Text = classRow[ "Name" ].ToString();                                        //班級節點的文字設為當前班級的名稱;                          classNode.Tag = classRow[ "No" ];                                                      //班級節點的標籤設為當前班級的編號;                          majorNode.Nodes.Add(classNode);                                                      //班級節點加入當前專業節點的節點集合,成為第2級節點之一;                      }                  }              }              this .trv_EducationUnit.Nodes.AddRange(treeNodes.ToArray());

四.效果截圖