2018年11月12日星期一

ADO.Net中DataSet的應用

一:什麼是DataSet?

DataSet是ADO.NET的中心概念。可以把DataSet當成內存中的數據庫,DataSet是不依賴於數據庫的獨立數據集合。所謂獨立,就是説,即使斷開數據鏈路,或者關閉數據庫,DataSet依然是可用的.

 

dataset中的__getitem___sql

 

二:DataSet特點

1) 獨立性。DataSet獨立於各種數據源,可以處理脱機數據,在多層應用程序中很有用.

(2) 離線(斷開)和連接,即允許在任何時候查看DataSet中任意行的內容,允許修改查詢結果的方法。。

(3) XML的完整性,即DataSet對象是一個可以用XML形式表示的數據視圖,是一種數據關係視圖。

三:DataSet與DataReader的關係

是ADO.NET開發人員為方便數據處理開發出來的,是數據的集合,是為解決DataReader的缺陷設計的,DataReader數據處理速度快,但 它是隻讀的,而且一旦移到下一行,就不能查看上一行的數據,DataSet則可以自由移動指針。

四:DataTable和DataSet區別

包含很多個DataTable: 一張表的時候用DataTable就可以,多張表就用DataSet了(datatable是一張表,dataset是表的集合。)

可以認為DataSet就是一個數據庫,DataTable就是數據庫裏的表。

五:思維導圖

 

dataset中的__getitem___Text_02

 

六:DataSet使用方法

(1)把數據庫中的數據通過DataAdapter對象填充DataSet。

例:在此例中,我將使用DataAdapter填充DataSet。如下列代碼中的黃線部分。

     

bool dd = true;
            try
            {
                sqlCommand.ExecuteNonQuery();
            }
            catch
            {           
 
                dd = false;
查詢失敗!該患者不存在!");
 
            }
           if(dd)
            {
SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = sqlCommand;
                DataSet d = new DataSet();
                da.Fill(d);
                int b = d.Tables[0].Rows.Count;
                if (b > 0)
                {
label41.Text = d.Tables[0].Rows[0]["yi"].ToString();
 label40.Text = d.Tables[0].Rows[0]["er"].ToString();
label39.Text = d.Tables[0].Rows[0]["san"].ToString();
label38.Text = d.Tables[0].Rows[0]["si"].ToString();
                }

操作成功後,在每個label框中都會顯現對應的數據。

 

dataset中的__getitem___sql_03

 

(2)使用DataSet填充樹形菜單

代碼:

SqlConnection sqlConnection = new SqlConnection();
sqlConnection.ConnectionString =
"Server=(local);Database=huli;Integrated Security=sspi";
SqlCommand sqlCommand = new SqlCommand();                                                       
  sqlCommand.Connection = sqlConnection;                                                          
sqlCommand.CommandText =                                                                        "SELECT distinct keshi as type FROM tb_patient;"                                                            
 + "select distinct * from tb_patient";
//用此種方法可查詢一張表中的關係
 sqlDataAdapter.SelectCommand = sqlCommand;                                                      
 DataSet dataSet = new DataSet();                                                               
 sqlConnection.Open();                                                                           
 sqlDataAdapter.Fill(dataSet);                                                                   
 sqlConnection.Close();                                                                          
 DataTable departmentTable = dataSet.Tables[0];                                                  
 DataTable de = dataSet.Tables[1]; 
 DataRelation[] dataRelations =                                                                  
 {
 new DataRelation                                                                            
       ("keshi_patient"                                                                     
       ,departmentTable.Columns["type"]                    
       , de.Columns["keshi"]                                                    
       , false)                                                                                
 };
 dataSet.Relations.AddRange(dataRelations);                                                      
 this.trv_EducationUnit.Nodes.Clear();                                                           
 foreach (DataRow departmentRow in departmentTable.Rows)                                        
{
TreeNode departmentNode = new TreeNode();                                                   
departmentNode.Text = departmentRow["type"].ToString();                                                  this.trv_EducationUnit.Nodes.Add(departmentNode);                                           
 foreach (DataRow majorRow in departmentRow.GetChildRows("keshi_patient"))               
 {
 TreeNode majorNode = new TreeNode();                                                    
majorNode.Text = majorRow["username"].ToString();
majorNode.Tag = majorRow["userid"];                   departmentNode.Nodes.Add(majorNode);                                                    
  }
 }

運行效果圖:

 

dataset中的__getitem___Text_04