C# DataTable与DataSet的学习

本文介绍了C#中的DataSet和DataTable的基本概念、初始化方式及其常见属性和方法。DataSet作为内存中的数据缓存,可以与XML文件配合使用。而DataTable表示内存中的数据表,常用于存储查询结果,并提供了添加、删除、修改数据的功能。两者共同构成数据容器,能提高客户端性能并减少数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本概念:

       DataSet类指的是:一个存放于内存中的数据缓存。(表现形式是怎样的),主要用于从数据库或其他文件里获取数据。

在初始化的时候我们主要是通过两种方式:

       第一种:DataSet ds = new DataSet();

       第二种:DataSet ds = new DataSet(String)//用给定名称初始化DataSet类。

在其属性里面,比较常用的是DataSet.Tables属性,用于获取集合中包含的表。

而在其方法里面,我们可以看到很多的读取和写入XML文件的方法,如下图,所以以后可以考虑使用XML文件与DataSet配合使用。

 

网上比较通俗的解释是:

    “你可以把DataTable和DataSet看做是数据容器,比如你查询数据库后得到一些结果,可以放到这种容器里,那你可能要问:我不用这种容器,自己读到变量或数组里也一样可以存起来啊,为什么用容器?

    原因是,这种容器的功能比较强大,除了可以存数据,还可以有更大用途。举例:在一个c/s结构的桌面数据库系统里,你可以把前面存放查询结果的容器里的数据显示到你客户端界面上,用户在界面上对数据进行添加、删除、修改,你可以把用户的操作更新到容器,等用户操作完毕了,要求更新,然后你才把容器整个的数据变化更新到中心数据库,这样做的好处是什么?就是减少了数据库操作,客户端速度提高了,数据库压力减小了。”

引自:http://hi.baidu.com/jhfcjl/item/de371ae4628372b02f140b3b

 

DataTable:

基本概念:表示内存中数据的一个表,(表现形式是怎样的?)

初始化比较常用的有两种:

       第一种:DataTable dt = new DataTable();//不带任何参数

       第二种:DataTable dt = new DataTable(string);使用指定表名称来初始化DataTable类

比较常用的属性有四个:

1、  DataSet:获取所属的DataSet;

2、  Columns:获取属于此表的列的集合;

3、  Rows:获取属于此表的行的集合;

4、  TableName:获取或设置DataTable的名称。

比较常用的方法有:

       NewRow():创建一个新 DataRow 具有与表相同的架构;

 

示例:DataTable添加行列的三种方法:


 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#region  :
DataTable  tblDatas  = new  DataTable ( " Datas " ) ;
DataColumn  dc  = null ;
dc  =  tblDatas . Columns . Add ( " ID " ,  Type . GetType ( " System.Int32 " )) ;
dc . AutoIncrement  = true ; //
dc . AutoIncrementSeed  = 1 ; //1
dc . AutoIncrementStep  = 1 ; //1
dc . AllowDBNull  = false ;
dc  =  tblDatas . Columns . Add ( " Product " ,  Type . GetType ( " System.String " )) ;
dc  =  tblDatas . Columns . Add ( " Version " ,  Type . GetType ( " System.String " )) ;
dc  =  tblDatas . Columns . Add ( " Description " ,  Type . GetType ( " System.String " )) ;
DataRow  newRow ;
newRow  =  tblDatas . NewRow ( ) ;
newRow [ " Product " ]  = " " ;
newRow [ " Version " ]  = " 2.0 " ;
newRow [ " Description " ]  = " " ;
tblDatas . Rows . Add ( newRow ) ;
newRow  =  tblDatas . NewRow ( ) ;
newRow [ " Product " ]  = " " ;
newRow [ " Version " ]  = " 3.0 " ;
newRow [ " Description " ]  = " " ;
tblDatas . Rows . Add ( newRow ) ;
#endregion
 
#region  :
DataTable  tblDatas  = new  DataTable ( " Datas " ) ;
tblDatas . Columns . Add ( " ID " ,  Type . GetType ( " System.Int32 " )) ;
tblDatas . Columns [ 0 ] . AutoIncrement  = true ;
tblDatas . Columns [ 0 ] . AutoIncrementSeed  = 1 ;
tblDatas . Columns [ 0 ] . AutoIncrementStep  = 1 ;
tblDatas . Columns . Add ( " Product " ,  Type . GetType ( " System.String " )) ;
tblDatas . Columns . Add ( " Version " ,  Type . GetType ( " System.String " )) ;
tblDatas . Columns . Add ( " Description " ,  Type . GetType ( " System.String " )) ;
tblDatas . Rows . Add ( newobject [ ]  {  null ,  " a " ,  " b " ,  " c "  }) ;
tblDatas . Rows . Add ( newobject [ ]  {  null ,  " a " ,  " b " ,  " c "  }) ;
tblDatas . Rows . Add ( newobject [ ]  {  null ,  " a " ,  " b " ,  " c "  }) ;
tblDatas . Rows . Add ( newobject [ ]  {  null ,  " a " ,  " b " ,  " c "  }) ;
tblDatas . Rows . Add ( newobject [ ]  {  null ,  " a " ,  " b " ,  " c "  }) ;
#endregion
#region 
DataTable  table  = new  DataTable ( ) ;
//table
DataColumn  priceColumn  = new  DataColumn ( ) ;
priceColumn . DataType  =  System . Type . GetType ( " System.Decimal " ) ; //
priceColumn . ColumnName  = " price " ; //
priceColumn . DefaultValue  = 50 ; //
// table
DataColumn  taxColumn  = new  DataColumn ( ) ;
taxColumn . DataType  =  System . Type . GetType ( " System.Decimal " ) ;
taxColumn . ColumnName  = " tax " ; //
taxColumn . Expression  = " price * 0.0862 " ; //
// table
DataColumn  totalColumn  = new  DataColumn ( ) ;
totalColumn . DataType  =  System . Type . GetType ( " System.Decimal " ) ;
totalColumn . ColumnName  = " total " ;
totalColumn . Expression  = " price + tax " ; //
// table
table . Columns . Add ( priceColumn ) ;
table . Columns . Add ( taxColumn ) ;
table . Columns . Add ( totalColumn ) ;
//
DataRow  row  =  table . NewRow ( ) ;
table . Rows . Add ( row ) ; //table
//table
DataView  view  = new  DataView ( table ) ;
//DataGrid
dg . DataSource  =  view ;
dg . DataBind ( ) ;
#endregion  

 

总的来说,DataTable与DataSet都是数据的容器,DataSet里面包含DataTable,例如从数据库中获取数据时,如下:


 
  DataTable  GetDataFromExcel ( boolean  hasTitle  =  false ) {
     DataSet  ds  =  new  DataSet ( ) ;
     string  strCon  =  string . Format ( " Provider=Microsoft.Jet.OLEDB.{0}.0; "  +
                   Extended  Properties =\ " Excel {1}.0;HDR={2};IMEX=1; \" ; "  +  " data source={3}; " ,
            ( fileType  ==  " .xls "  ?  4  :  12 ) ,  ( fileType  ==  " .xls "  ?  8  :  12 ) ,  ( hasTitle  ?  " Yes "  :  " NO " ) ,  filePath ) ;
     string  strCom  =  "  SELECT * FROM [$] " ;
     OleDbConnection  myConn  =  new  OleDbConnection ( strCon )
     myConn . Open ( ) ;
     OleDbDataAdapter  myCommand  =  new  OleDbDataAdapter ( strCom ,  myConn ) ;
     myCommand . Fill ( ds ) ;
     if  ( ds  ==  null  ||  ds . Tables . Count  <=  0 )  return  null ;
     return  ds . Tables [ 0 ] ;
} 
DataTable  dt  =  this . GetDataFromExcelByConn ( ) ;
dataGridView1 . DataSource  =  dt ;

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值