对于数据库的操作,资料太多,大家也比较熟悉。
但有时数据量较少,但更新频繁的变量操作,通常采用自定义结构,但自定义结构的可维护性和灵活性就比不上临时表,我们可以先用DataTable做为内存临时表,以数据库操作的方式灵活添加列、行,完成 主键设置、查询、更新等操作,还可以保存为xml文件。
假设在当前类作用域有全局对象
public
static
DataTable dtRefresh
=
new
DataTable();
我们在某个测试函数中添加下面的测试代码:
为了方便存储为xml文件,需要设置表名:
dtRefresh.TableName
=
"
刷新任务
"
;
为临时表添加表结构,既列名:
dtRefresh.Columns.Add(
"
数量
"
,
typeof
(
int
));
dtRefresh.Columns.Add(
"
频率
"
,
typeof
(
int
));
dtRefresh.Columns.Add(
"
自动关闭延迟
"
,
typeof
(
int
));
dtRefresh.Columns.Add(
"
Url
"
,
typeof
(
string
));
设置其中一个列Url为主键:
DataColumn[] clos
=
new
DataColumn[
1
];
clos[
0
]
=
dtRefresh.Columns[
"
Url
"
];
dtRefresh.PrimaryKey
=
clos;
为表添加一行测试记录:
注意:添加行时,应先声明行,在需要用时再赋予对象实体,这样的目的是为了突出每次添加新行时,只需赋予一个dtRefresh.NewRow()返回的对象即可,而不用重新声明一个行对象名。因为类操作是传引用,如果一个行对象名赋予一个表,再修改这个对象名的内容,表中内容会跟着修改,所以每次添加行时要重用行名但避免重用对象。
DataRow dr;
dr
=
dtRefresh.NewRow();
dr[
"
数量
"
]
=
100
;
dr[
"
频率
"
]
=
100
;
dr[
"
自动关闭延迟
"
]
=
100
;
dr[
"
Url
"
]
=
"
http://www.baidu.com/
"
;
dtRefresh.Rows.Add(dr);
执行查询:
DataRow[] drArr
=
dtRefresh.Select(
"
Url = \'http://www.baidu.com/\'
"
);
foreach
(var item
in
drArr)
{
txb.Text
+=
item[
"
Url
"
].ToString()
+
Environment.NewLine;
}
根据查询条件,更新记录:
DataRow[] drArr
=
dtRefresh.Select(
"
Url = \'http://www.baidu.com/\'
"
);
drArr[
0
][
"
Url
"
]
=
"
g.cn
"
;
foreach
(var item
in
drArr)
{
txb.Text
+=
item[
"
Url
"
].ToString()
+
Environment.NewLine;
}
写入XML文件:
dtRefresh.WriteXml(
@"
d:\1.xml
"
);