ado.net DataSet

一、概念

DataSetADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的,DataSet在内部是用XML来描述数据的,由于XML是一种与平台无关、与语言无关的数据描述语言,而且可以描述复杂关系的数据,比如父子关系的数据,所以DataSet实际上可以容纳具有复杂关系的数据,而且不再依赖于数据库链路。

因为DataSet可以看做是内存中的数据库,也因此可以说DataSet是数据表的集合,它可以包含任意多个数据表(DataTable),而且每一 DataSet中的数据表(DataTable)对应一个数据源中的数据表(Table)或是数据视图(View)。数据表实质是由行(DataRow)和 列(DataColumn)组成的集合为了保护内存中数据记录的正确性,避免并发访问时的读写冲突,DataSet对象中的DataTable负责维护每一条记录,分别保存记录的初始状态和当前状态。从这里可以看出DataSet是与只能存放单张数据表的Recordset是截然不同的概念。

二、特点

(1) 独立性。DataSet独立于各种数据源。

(2) 离线(断开)和连接。

(3) DataSet对象是一个可以用XML形式表示的数据视图,是一种数据关系视图。

三、使用方法

在实际应用中,DataSet使用方法一般有三种:

(1) 把数据库中的数据通过DataAdapter对象填充DataSet

(2) 通过DataAdapter对象操作DataSet实现更新数据库。

(3) XML数据流或文本加载到DataSet 

四、实例

private void toolStripMenuItem7_Click(object sender, EventArgs e)
        {
            using (SqlConnection sqlConnection = new SqlConnection(DBHelper.connString))
            {

                SqlCommand sqlCommand = new SqlCommand();
                sqlCommand.Connection = sqlConnection;
                sqlCommand.CommandText =                                                                        
                    "SELECT * FROM tb_Client;"                                                              
                    + "SELECT * FROM tb_chushou;"
                    + "SELECT * FROM tb_medicine;";
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           
                sqlDataAdapter.SelectCommand = sqlCommand;                                                      
                DataSet dataSet = new DataSet();                                                                
                sqlConnection.Open();                                                                           
                sqlDataAdapter.Fill(dataSet);                                                                   
                sqlConnection.Close();                                                                          
                DataTable ClientTable = dataSet.Tables[0];                                                  
                DataTable chushouTable = dataSet.Tables[1];                                                       
                DataTable medicineTable = dataSet.Tables[2];                                                       
                DataRelation[] dataRelations =                                                                  
                {
                    new DataRelation                                                                            
                        ("Client_chushou"                                                                     
                        , ClientTable.Columns["CNO"]                                                         
                        , chushouTable.Columns["CNO"]                                                    
                        , false)                                                                                
                    , new DataRelation                                                                          
                        ("chushou_medicine"                                                                          
                        , chushouTable.Columns["MNo"]                                                              
                        , medicineTable.Columns["MNo"]                                                         
                        , false)                                                                                
                };
                dataSet.Relations.AddRange(dataRelations);                                                      
                this.trv_Client.Nodes.Clear();                                                           
                foreach (DataRow ClientRow in ClientTable.Rows)                                         
                {
                    TreeNode ClientNode = new TreeNode();                                                   
                    ClientNode.Text = ClientRow["CName"].ToString();                                     
                    this.trv_Client.Nodes.Add(ClientNode);                                           
                    foreach (DataRow chushouRow in ClientRow.GetChildRows("Client_chushou"))                
                    {
                        //TreeNode chushouNode = new TreeNode();
                        
                        ////chushouNode.Text = "";                                          
                        //ClientNode.Nodes.Add(chushouNode);                                                    
                        foreach (DataRow MRow in chushouRow.GetChildRows("chushou_medicine"))                      
                        {
                            TreeNode MNode = new TreeNode();                                                
                            MNode.Text = MRow["MName"].ToString();                                       
                            MNode.Tag = MRow["MNo"];                                                     
                            ClientNode.Nodes.Add(MNode);                                                     
                        }
                    }
                }

            }
        }

猜你喜欢

转载自www.cnblogs.com/xxnzmy/p/9993019.html