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());
|
四.效果截圖