天天看點

ADO.Net中DataSet的應用。

思維導圖

ADO.Net中DataSet的應用。

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)
        {

        }
    }
}
           

運作結果

ADO.Net中DataSet的應用。