• 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

  • 相关阅读:
    针对wamp的phpmyadmin显示#2003无法连接mysql
    vs2019编译gdal3.1.0报错 (filemanager.obj) : error LNK2001: 无法解析的外部符号 __imp_SHGetFolderPathW
    半透明遮罩层覆盖整个可视区域
    css首字下沉
    仿花瓣标题栏始终在页面顶部(ie6下position:fixed失效解决方法)
    Redis最佳实践及核心原理
    Java对接微信公众号模板消息推送
    XXLJOB任务调度
    MyBatis学习笔记
    SpringBoot集成Redis
  • 原文地址:https://www.cnblogs.com/wenjie0904/p/7719751.html
Copyright © 2020-2023  润新知