思維導圖

DataSet是ADO.NET的中心概念。可以把DataSet當成記憶體中的資料庫,DataSet是不依賴于資料庫的獨立資料集合。也就是說,即使斷開資料鍊路,或者關閉資料庫,DataSet依然是可用的。
DataSet對象的三大特性
1.獨立性。DataSet獨立于各種資料源。
2.離線(斷開)和連接配接。
3.DataSet對象是一個可以用XML形式表示的資料視圖,是一種資料關系視圖。
DataSet常用的屬性和方法
屬性 | 描述 |
---|---|
Tables | DataSet對象中包含的資料表集合 |
Relations | DataSet對象中包含的關系集合 |
CaseSensitive | 訓示DataTable對象中的字元串是否區分大小寫 |
EnforceConstraints | 擷取或設定一個值,訓示在更新操作時是否遵循限制規則 |
方法 | 描述 |
---|---|
AcceptChanges() | 送出自加載DataSet或上次調用該方法以來對其進行的更改 |
Clear() | 通過移除所有表的所有行來清除DataSet資料 |
Clone() | 複制DataSet結構,包括所有DataTable架構、關系和限制 |
Copy() | 複制DataSet結構和資料 |
HasChanges() | 擷取一個值,訓示DataSet中是否有增、删、改的行。 |
RejectChanges() | 復原自加載DataSet或上次調用該方法以來對其進行的更改 |
使用Dataset的幾個步驟
1.建立到資料源的連接配接,建立sqlCommand對象,指定一個存儲過程的名字或者一個SQL語句,指定資料鍊路;
SqlConnection sqlConnection = new SqlConnection(); //聲明并執行個體化SQL連接配接;
sqlConnection.ConnectionString =
ConfigurationManager.ConnectionStrings["Sql"].ConnectionString; //配置管理器從配置檔案讀取連接配接字元串,并将之賦予SQL連接配接的連接配接字元串屬性;
SqlCommand sqlCommand = new SqlCommand(); //聲明并執行個體化SQL指令;
sqlCommand.Connection = sqlConnection; //将SQL指令的連接配接屬性指向SQL連接配接;
sqlCommand.CommandText = //指定SQL指令的指令文本;
"SELECT * FROM tb_ks;" //該指令分别查詢所有科室,裝置,查詢結果将傳回多張表;
+ "SELECT * FROM tb_sb;";
2.聲明并執行個體化SQL資料擴充卡,同時借助構造函數,将其SelectCommand屬性設為先前建立的SQL指令;并将SQL資料擴充卡的查詢指令屬性指向SQL指令;
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //聲明并執行個體化SQL資料擴充卡,同時借助構造函數,将其SelectCommand屬性設為先前建立的SQL指令;
sqlDataAdapter.SelectCommand = sqlCommand; //将SQL資料擴充卡的查詢指令屬性指向SQL指令;
3.建立一個Dataset對象
DataSet dataSet = new DataSet();
4.調用SQL資料擴充卡讀取資料,并填充資料集;
sqlDataAdapter.Fill(dataSet); //SQL資料擴充卡讀取資料,并填充資料集;
5.操作資料。,下面用樹形視圖來操縱Dataset中的資料。
代碼
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient; //包含通路SQL Server所需的各類對象;
using System.Configuration; //包含通路配置檔案所需的配置管理器;需事先在本項目的“引用”中添加對System.Configuration的引用;
namespace WindowsFormsApplication1
{
public partial class frm_sbmanage : Form
{
public frm_sbmanage()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterScreen; //本窗體啟動位置設為螢幕中央;
this.dgv_Student.AllowUserToAddRows = false; //資料網格視圖不允許使用者添加行;
this.dgv_Student.RowHeadersVisible = false; //資料網格視圖的行标題不可見;
this.dgv_Student.BackgroundColor = Color.White; //資料網格視圖的背景色設為白色;
this.dgv_Student.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.AllCells; //資料網格視圖的自動調整列寬模式設為顯示所有單元格;
}
private void sbmanage_Load(object sender, EventArgs e)
{
SqlConnection sqlConnection = new SqlConnection(); //聲明并執行個體化SQL連接配接;
sqlConnection.ConnectionString =
ConfigurationManager.ConnectionStrings["Sql"].ConnectionString; //配置管理器從配置檔案讀取連接配接字元串,并将之賦予SQL連接配接的連接配接字元串屬性;
SqlCommand sqlCommand = new SqlCommand(); //聲明并執行個體化SQL指令;
sqlCommand.Connection = sqlConnection; //将SQL指令的連接配接屬性指向SQL連接配接;
sqlCommand.CommandText = //指定SQL指令的指令文本;
"SELECT * FROM tb_ks;" //該指令分别查詢所有科室,裝置,查詢結果将傳回多張表;
+ "SELECT * FROM tb_sb;";
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 ksTable = dataSet.Tables[0]; //聲明科室資料表,對應資料集的表集合中的第1張資料表;
DataTable sbTable = dataSet.Tables[1]; //聲明裝置資料表,對應資料集的表集合中的第2張資料表;
DataRelation[] dataRelations = //聲明資料關系數組;
{
new DataRelation //執行個體化資料關系,實作科室表,裝置表之間的層次關系;
("Department_Major" //資料關系名稱;
, ksTable.Columns["No"] //父表的被參照列為科室表的編号列;
, sbTable.Columns["Ksno"] //子表的參照列為裝置表的科室編号列;
, false) //不建立限制(父列上的唯一限制、子列上的外鍵限制);
};
dataSet.Relations.AddRange(dataRelations); //将資料關系數組批量加入資料集的關系集合中;
this.trv_EducationUnit.Nodes.Clear(); //樹形視圖的節點集合清空;
foreach (DataRow ksRow in ksTable.Rows) //周遊科室資料表中的每一資料行;
{
TreeNode ksNode = new TreeNode(); //聲明并執行個體化科室節點,該節點對應目前某個科室;
ksNode.Text = ksRow["Name"].ToString(); //科室節點的文本設為目前科室的名稱;
this.trv_EducationUnit.Nodes.Add(ksNode); //将科室節點加入樹形視圖的(根)節點集合;
foreach (DataRow sbRow in ksRow.GetChildRows("Department_Major")) //借助先前定義的資料關系,周遊目前科室所在資料行的子行,即下屬所有裝置;
{
TreeNode sbNode = new TreeNode(); //聲明并執行個體化裝置節點,該節點對應目前某個裝置;
sbNode.Text = sbRow["Name"].ToString(); //專業節點的文本設為目前裝置的名稱;
ksNode.Nodes.Add(sbNode); //專業節點加入目前科室節點的節點集合,成為第1級節點之一;
}
}
}
private void trv_EducationUnit_AfterSelect(object sender, TreeViewEventArgs e)
{
if (this.trv_EducationUnit.SelectedNode.Level == 1) //若樹形視圖的選中節點的級别為2,即選中裝置節點;
{
String Name = this.trv_EducationUnit.SelectedNode.Text.ToString (); //将樹形視圖的選中節點的标簽轉為整型,即可獲得事先儲存的裝置編号;
SqlConnection sqlConnection = new SqlConnection(); //聲明并執行個體化SQL連接配接;
sqlConnection.ConnectionString =
ConfigurationManager.ConnectionStrings["Sql"].ConnectionString; //配置管理器從配置檔案讀取連接配接字元串,并将之賦予SQL連接配接的連接配接字元串屬性;
SqlCommand sqlCommand = new SqlCommand(); //聲明并執行個體化SQL指令;
sqlCommand.Connection = sqlConnection; //将SQL指令的連接配接屬性指向SQL連接配接;
sqlCommand.CommandText = "SELECT * FROM tb_sb WHERE [email protected];"; //指定SQL指令的指令文本;該指令查詢目前選中裝置的資訊,以用作資料網格視圖資料源;
sqlCommand.Parameters.AddWithValue("@Name", Name); //向SQL指令的參數集合添加參數的名稱、值;
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //聲明并執行個體化SQL資料擴充卡,同時借助構造函數,将其SelectCommand屬性設為先前建立的SQL指令;
sqlDataAdapter.SelectCommand = sqlCommand; //将SQL資料擴充卡的查詢指令屬性指向SQL指令;
DataTable sb1Table = new DataTable(); //聲明并執行個體化資料表,用于儲存目前選中裝置資訊,以用作資料網格視圖的資料源;
sqlConnection.Open(); //打開SQL連接配接;
sqlDataAdapter.Fill(sb1Table); //SQL資料擴充卡讀取資料,并填充裝置;
sqlConnection.Close(); //關閉SQL連接配接;
this.dgv_Student.DataSource = sb1Table; //設定資料網格視圖的資料源;
this.dgv_Student.Columns["No"].HeaderText = "編号"; //将資料網格視圖的指定列的表頭文本設為中文;
this.dgv_Student.Columns["Name"].HeaderText = "名稱";
this.dgv_Student.Columns["Address"].HeaderText = "簡介"; //将資料網格視圖的指定列的表頭文本設為中文;
this.dgv_Student.Columns["Date"].HeaderText = "起用時間";
this.dgv_Student.Columns["Image"].Visible = false;
this.dgv_Student.Columns["Ksno"].Visible = false;
this.dgv_Student.Columns["Value"].Visible = false;
this.dgv_Student.Columns[this.dgv_Student.Columns.Count - 1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; //資料網格視圖的最後一列的自動調整列寬模式設為填充(至資料網格視圖右側邊緣);
}
}
private void dgv_Student_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
}
}
運作結果