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

posted @ 2017-10-23 23:10  逯文杰  阅读(21947)  评论(0编辑  收藏  举报