基本概念:
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
;