在执行对表中数据的查询时还能将数据保存到 DataSet 中,但需要借助 DataAdapter 类来实现。
在实际应用中,DataAdapter 与 DataSet 是在查询操作中使用最多的类。
此外,还可以通过 DataSet 实现对表中数据的增加、修改、删除操作。
DataAdapter 与 DataSet 类简介
DataAdapter 类用于将数据表中的数据查询出来并添加到 DataSet 中,DataAdapter 在 System.Data.SqlClient 命名空间下 对应的类名是 SqlDataAdapter。
SqlDataAdapter 类的主要构造方法如下表所示。
构造方法 | 说明 |
---|---|
SqlDataAdapter(SqlCommand cmd) | 带参数的构造方法,传递 SqlCommand 类的对象作为参数 |
SqlDataAdapter(string sql, SqlConnection conn) | 带参数的构造方法,sql 参数是指定对数据表执行的 SQL 语句,conn 是数据库的连接对象 |
SqlDataAdapter() | 不带参数的构造方法 |
从 SqlDataAdapter 类的构造方法可以看出,SqlDataAdapter 类需要与 SqlCommand 类和 SqlConnection 类一起使用。
SqlDataAdapter 类常用的属性和方法如下表所示。
属性或方法 | 说明 |
---|---|
SelectCommand | 属性,设置 SqlDataAdapter 中要执行的查询语句 |
InsertCommand | 属性,设置 SqlDataAdapter 中要执行的添加语句 |
UpdateCommand | 属性,设置 SqlDataAdapter 中要执行的修改语句 |
DeleteCommand | 属性,设置 SqlDataAdapter 中要执行的删除语句 |
Fill(DataSet ds) | 方法,将 SqlDataAdapter 类中查询出的结果填充到 DataSet 对象中 |
Fill(DataTable dt) | 方法,将 SqlDataAdapter 类中查询出的结果填充到 DataTable 对象 中,DataTable是数据表对象,在一个DataSet对象中由多个 DataTable对象构成 |
Update(DataSet ds) | 方法,更新 DataSet 对象中的数据 |
Update(DataTable dt) | 方法,更新 DataTable 对象中的数据 |
DataSet 类是一种与数据库结构类似的数据集,每个 DataSet 都是由若干个数据表构成的,DataTable 即数据表,每个 DataTable 也都是由行和列构成的,行使用 DataRow 类表示、列使用 DataColumn 类表示。
此外,用户还可以通过 DataRelation 类设置数据表之间的关系。
下面介绍 DataSet 类以及 DataTable 类的使用。
1) DataSet 类
DataSet 类中的构造方法如下表所示。
构造方法 | 说明 |
---|---|
DataSet() | 无参构造方法 |
DataSet(string DataSetName) | 带参数的构造方法,DataSetName 参数用于指定数据集名称 |
DataSet 类中常用的属性和方法如下表所示。
属性或方法 | 说明 |
---|---|
Tables | 属性,获取 DataSet 中所有数据表的集合,Tables[0] 代表集合中的第一个数据表 |
CaseSensitive | 属性,获取或设置 DataSet 中的字符串是否区分大小写 |
Relations | 属性,获取 DataSet 中包含的关系集合 |
Clear() | 方法,清空 DataSet 中的数据 |
Copy() | 方法,复制 DataSet 中的数据 |
AcceptChanges() | 方法,更新 DataSet 中的数据 |
HasChanges() | 方法,获取 DataSet 中是否有数据发生变化 |
RejectChanges() | 方法,撤销对 DataSet 中数据的更改 |
2) DataTable
DataTable 作为 DataSet 中的重要对象,其与数据表的定义是类似的,都是由行和列构成,并有唯一的表名。
从 SqlDataAdapter 类的填充方法 (Fill) 中可以看出允许将数据直接填充到 DataTable 中,这样既能节省存储空间也能简 化查找数据表中的数据。
DataTable 中常用的构造方法如下表所示。
构造方法 | 说明 |
---|---|
DataTable() | 无参构造方法 |
DataTable(string TableName) | 带参数的构造方法, TableName 参数用于指定数据表的名称 |
DataTable 与 DataSet 有很多相似的属性和方法,在下表中列出了一些与 DataSet 类不同的属性。
属性 | 说明 |
---|---|
TableName | 属性,获取或设置 DataTable 的名称 |
Columns | 属性,获取 DataTable 中列的集合 |
Rows | 属性,获取 DataTable 中行的集合 |
DataSet | 属性,获取 DataTable 所在的 DataSet |
Constraints | 属性,获取 DataTable 中的所有约束 |
使用 DataSet 和 DataTable 类存放查询结果
在实际应用中,将查询结果存储到 DataSet 类或 DataTable 类中均可,在操作查询结果时也非常类似。
string sql = "SELECT * FROM UserAlertTable ORDER BY datetime desc;";
DataSet ds = new DataSet();
using (SqlConnection con = new SqlConnection(str))
{
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
//adapter.SelectCommand = new SqlCommand("SELECT * FROM UserAlertTable WHERE id = 18 ORDER BY datetime desc",con);
adapter.Fill(ds);
adapter.Update(ds);
}
if (ds.Tables[0].Rows.Count > 0)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
WriteLine(ds.Tables[0].Rows[i]["datetime"]);
}
}