一、概念

DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的,DataSet在内部是用XML来描述数据的,由于XML是一种与平台无关、与语言无关的数据描述语言,而且可以描述复杂关系的数据,比如父子关系的数据,所以DataSet实际上可以容纳具有复杂关系的数据,而且不再依赖于数据库链路。

因为DataSet可以看做是内存中的数据库,也因此可以说DataSet是数据表的集合,它可以包含任意多个数据表(DataTable),而且每一 DataSet中的数据表(DataTable)对应一个数据源中的数据表(Table)或是数据视图(View)。数据表实质是由行(DataRow)和 列(DataColumn)组成的集合为了保护内存中数据记录的正确性,避免并发访问时的读写冲突,DataSet对象中的DataTable负责维护每一条记录,分别保存记录的初始状态和当前状态。从这里可以看出DataSet是与只能存放单张数据表的Recordset是截然不同的概念。

二、特点

(1) 独立性。DataSet独立于各种数据源。

(2) 离线(断开)和连接。

(3) DataSet对象是一个可以用XML形式表示的数据视图,是一种数据关系视图。

三、使用方法

在实际应用中,DataSet使用方法一般有三种:

(1) 把数据库中的数据通过DataAdapter对象填充DataSet。

(2) 通过DataAdapter对象操作DataSet实现更新数据库。

(3) 把XML数据流或文本加载到DataSet。

四、实例

private void toolStripMenuItem7_Click(object sender, EventArgs e)
{
using (SqlConnection sqlConnection = new SqlConnection(DBHelper.connString))
{ SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText =
"SELECT * FROM tb_Client;"
+ "SELECT * FROM tb_chushou;"
+ "SELECT * FROM tb_medicine;";
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
sqlDataAdapter.SelectCommand = sqlCommand;
DataSet dataSet = new DataSet();
sqlConnection.Open();
sqlDataAdapter.Fill(dataSet);
sqlConnection.Close();
DataTable ClientTable = dataSet.Tables[];
DataTable chushouTable = dataSet.Tables[];
DataTable medicineTable = dataSet.Tables[];
DataRelation[] dataRelations =
{
new DataRelation
("Client_chushou"
, ClientTable.Columns["CNO"]
, chushouTable.Columns["CNO"]
, false)
, new DataRelation
("chushou_medicine"
, chushouTable.Columns["MNo"]
, medicineTable.Columns["MNo"]
, false)
};
dataSet.Relations.AddRange(dataRelations);
this.trv_Client.Nodes.Clear();
foreach (DataRow ClientRow in ClientTable.Rows)
{
TreeNode ClientNode = new TreeNode();
ClientNode.Text = ClientRow["CName"].ToString();
this.trv_Client.Nodes.Add(ClientNode);
foreach (DataRow chushouRow in ClientRow.GetChildRows("Client_chushou"))
{
//TreeNode chushouNode = new TreeNode(); ////chushouNode.Text = "";
//ClientNode.Nodes.Add(chushouNode);
foreach (DataRow MRow in chushouRow.GetChildRows("chushou_medicine"))
{
TreeNode MNode = new TreeNode();
MNode.Text = MRow["MName"].ToString();
MNode.Tag = MRow["MNo"];
ClientNode.Nodes.Add(MNode);
}
}
} }
}

最新文章

  1. iOS通知的使用
  2. debug和release之间的时间优化问题
  3. input---checked小问题
  4. windows 程序设计自学:添加字符串资源
  5. 我的cocos2d-x集成sharesdk之旅(转)
  6. android4.0蓝牙使能的详细解析 (转载)
  7. JSP简单练习-使用JDOM创建xml文件
  8. JavaScript实现的购物车效果-效果好友列表
  9. nginx漏洞分析与升级修复
  10. webpack4加载字体
  11. java-启动和关闭.exe程序
  12. centos6分辨率设置
  13. gitlab 使用流程
  14. nginx通过https方式反向代理多实例tomcat
  15. JQuery 操作 radio 被坑一例
  16. P2473 [SCOI2008]奖励关
  17. [Robot Framework] Jenkins上调用Rebot命令时执行报错不往下执行其他命令
  18. 数据库和struts2的拦截器
  19. [LeetCode&Python] Problem 917. Reverse Only Letters
  20. DNS DHCP 路由 FTP

热门文章

  1. CF1137E Train Car Selection(单调栈维护凸函数)
  2. kaggle注册获取数据
  3. class.forName() 和 classLoader 的区别
  4. 系统学习javaweb4----CSS层叠样式表(结束)
  5. python语法基础-文件操作-长期维护
  6. Windows可以往外ping,外部却ping不通本机
  7. php获取mysql大小
  8. C#函数的基础应用
  9. 源码中TODO、FIXME和XXX的含义
  10. Nginx 原理和架构