C#之DataSet和DataTable


概述    

可以把DataTable和DataSet看做是數據容器,比如你查詢數據庫后得到一些結果,可以放到這種容器里,那你可能要問:我不用這種容器,自己讀到變量或數組里也一樣可以存起來啊,為什么用容器?

    原因是,這種容器的功能比較強大,除了可以存數據,還可以有更大用途。舉例:在一個c/s結構的桌面數據庫系統里,你可以把前面存放查詢結果的容器里的數據顯示到你客戶端界面上,用戶在界面上對數據進行添加、刪除、修改,你可以把用戶的操作更新到容器,等用戶操作完畢了,要求更新,然后你才把容器整個的數據變化更新到中心數據庫,這樣做的好處是什么?就是減少了數據庫操作,客戶端速度提高了,數據庫壓力減小了。
    DataSet可以比作一個內存中的數據庫,DataTable是一個內存中的數據表,DataSet里可以存儲多個DataTable。
    DataSet:數據集。一般包含多個DataTable,用的時候,dataset["表名"]得到DataTable  

    DataTable:數據表。  

DEMO1:  

  1. SqlDataAdapter   da=new   SqlDataAdapter(cmd);    
  2. DataTable   dt=new   DataTable();    
  3. da.Fill(dt);  
 
        

 直接把數據結果放到datatable中,  

 

DEMO2:  

  1. SqlDataAdapter   da=new   SqlDataAdapter(cmd);    
  2. DataSet   dt=new   DataSet();    
  3. da.Fill(dt);    
 
        

數據結果放到dataset中,若要用那個datatable,可以這樣:dataset[0]  
更常見的用法:  

  1. SqlDataAdapter   da=new   SqlDataAdapter(cmd);    
  2. DataSet   dt=new   DataSet();    
  3. da.Fill(dt,"table1");    
 
        

用的時候:這樣取datatable:  dataset["table1"] 

 

或者:

 

  1. SqlDataAdapter adapter = new SqlDataAdapter(strSql, _Connection);  
  2. adapter.Fill(dataSet);  
  3. return dataSet.Tables[0]  
 
        

當adapter.Fill(dataSet);執行后,程序會通過SQL引擎返回一個結果集存放在內存中,這個結果集就是一個DataTable,並且這個DataTable會被添家到dataSet.Tables中,所以return dataSet.Tables[0],就是返回你所要查詢的結果集

 

接收return:

 

  1. DataTable table = db.GetDataTable(strSql);    
  2. string rid = table.Rows[0]["rid"].ToString();  
 
        

table.Rows[0]表示table的第一行數據,table.Rows[0]["rid"].ToString()表示table中列rid的值,table的所有列是你在SQL中所查詢的所有列

 

遍歷DataTable:

通過通用類,返回一個DataTable,要想顯示每個單元格,只要做兩次循環即可:
    

  1. foreach (DataRow row in dt.Rows)   
  2. {   
  3.   foreach (DataColumn column in dt.Columns)   
  4.   {   
  5.  Console.WriteLine(row[column]);   
  6.   }   
  7. }  
 
        

row[column] 中的column是檢索出來的表個列名。

如果想把某列的值拼接字符串,那就去掉內層循環就行了:
    

  1. StringBuilder mailList = new StringBuilder();   
  2. foreach (DataRow row in dt.Rows)   
  3. {   
  4.    mailList.Append(row["Email"]);   
  5.    mailList.Append(";");   
  6. }   
 
        

向DataTable中手動添加行內容,並進行綁定、更新、排序

 

 

  1. DataTable   dt   =   new   DataTable();  
  2. DataRow   dr;  
  3. dt.Columns.Add(new   DataColumn( "整數值 ",   typeof(Int32)));  
  4. dt.Columns.Add(new   DataColumn( "字符串值 ",   typeof(string)));  
  5. dt.Columns.Add(new   DataColumn( "日期時間值 ",   typeof(DateTime)));  
  6. dt.Columns.Add(new   DataColumn( "布爾值 ",   typeof(bool)));  
  7. for   (int   i   =   1;   i   <=   9;   i++)   {  
  8.     dr   =   dt.NewRow();  
  9.     dr[0]   =   i;  
  10.     dr[1]   =   "項   "   +   i.ToString();  
  11.     dr[2]   =   DateTime.Now;  
  12.       dr[3]   =   (i   %   2   !=   0)   ?   true   :   false;  
  13.     dt.Rows.Add(dr);                        
  14. }  
  15. dataGrid1.DataSource   =   new   DataView(dt);  
  16. dataGrid1.DataBind();  
 
        

更多的操作:
1.創建表及插入列 

 

 

  1. DataTable dt=new DataTable();  
  2. dt.Colunmns.Add("Name",System.Type.GetType("System.String"));  
 
        


2.插入行

 

  1. DataRow newrow = dt.NewRow();  
  2. newrow[0]="aa";  
  3. dt.Rows.Add(newrow);  
 
        

3.排序

  1. DataView dv = dt.DefaultView;   
  2. dv.Sort = "Name  Desc";   
  3. DataTable dt1 = dv.ToTable();  
 
        

4.指定位置插入行

 

  1. DataTable dt = new DataTable("表名");  
  2. DataRow dr = dt.NewRow();  
  3. dr[0]="安江聯社戶外模";  
  4. dr[1] = "555";  
  5. dr[2] = "200707";  
  6. dr[3] = "0.00";  
  7. dr[4] = "0.00";  
  8. dr[5] = "0.00";  
  9. dr[6] = "0.00";  
  10. dt.Rows.Add(dr);   //在最後插入行  
  11. dtb1.Rows.InsertAt(dr,j); //j為指定的行的位置插入;  
  12. dataGridView1.DataSource = dt;  

 

 

 

轉自: http://blog.csdn.net/simaweier/article/details/8443293


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM