2018年11月12日星期一
ADO.Net中DataSet的应用
一:什么是DataSet?
DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的.

二:DataSet特点
1) 独立性。DataSet独立于各种数据源,可以处理脱机数据,在多层应用程序中很有用.
(2) 离线(断开)和连接,即允许在任何时候查看DataSet中任意行的内容,允许修改查询结果的方法。。
(3) XML的完整性,即DataSet对象是一个可以用XML形式表示的数据视图,是一种数据关系视图。
三:DataSet与DataReader的关系
DataSet 是ADO.NET开发人员为方便数据处理开发出来的,是数据的集合,是为解决DataReader的缺陷设计的,DataReader数据处理速度快,但 它是只读的,而且一旦移到下一行,就不能查看上一行的数据,DataSet则可以自由移动指针。
四:DataTable和DataSet区别
DataSet包含很多个DataTable: 一张表的时候用DataTable就可以,多张表就用DataSet了(datatable是一张表,dataset是表的集合。)
可以认为DataSet就是一个数据库,DataTable就是数据库里的表。
五:思维导图

六:DataSet使用方法
(1)把数据库中的数据通过DataAdapter对象填充DataSet。
例:在此例中,我将使用DataAdapter填充DataSet。如下列代码中的黄线部分。
bool dd = true;
try
{
sqlCommand.ExecuteNonQuery();
}
catch
{
dd = false;
MessageBox.Show("查询失败!该患者不存在!");
}
if(dd)
{
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = sqlCommand;
DataSet d = new DataSet();
da.Fill(d);
int b = d.Tables[0].Rows.Count;
if (b > 0)
{
label41.Text = d.Tables[0].Rows[0]["yi"].ToString();
label40.Text = d.Tables[0].Rows[0]["er"].ToString();
label39.Text = d.Tables[0].Rows[0]["san"].ToString();
label38.Text = d.Tables[0].Rows[0]["si"].ToString();
}
操作成功后,在每个label框中都会显现对应的数据。

(2)使用DataSet填充树形菜单
代码:
SqlConnection sqlConnection = new SqlConnection();
sqlConnection.ConnectionString =
"Server=(local);Database=huli;Integrated Security=sspi";
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = "SELECT distinct keshi as type FROM tb_patient;"
+ "select distinct * from tb_patient";
//用此种方法可查询一张表中的关系
sqlDataAdapter.SelectCommand = sqlCommand;
DataSet dataSet = new DataSet();
sqlConnection.Open();
sqlDataAdapter.Fill(dataSet);
sqlConnection.Close();
DataTable departmentTable = dataSet.Tables[0];
DataTable de = dataSet.Tables[1];
DataRelation[] dataRelations =
{
new DataRelation
("keshi_patient"
,departmentTable.Columns["type"]
, de.Columns["keshi"]
, false)
};
dataSet.Relations.AddRange(dataRelations);
this.trv_EducationUnit.Nodes.Clear();
foreach (DataRow departmentRow in departmentTable.Rows)
{
TreeNode departmentNode = new TreeNode();
departmentNode.Text = departmentRow["type"].ToString(); this.trv_EducationUnit.Nodes.Add(departmentNode);
foreach (DataRow majorRow in departmentRow.GetChildRows("keshi_patient"))
{
TreeNode majorNode = new TreeNode();
majorNode.Text = majorRow["username"].ToString();
majorNode.Tag = majorRow["userid"]; departmentNode.Nodes.Add(majorNode);
}
}
运行效果图:

浙公网安备 33010602011771号