标签:href 导航 ted shiro containe clone val ndt 内存
一、思维导图
二、概述
DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。所谓独立,就是即使断开数据链路,或者关闭数据库,DataSet依然是可用的,DataSet在内部是用XML来描述数据的。所以DataSet实际上可以容纳具有复杂关系的数据,而且不再依赖于数据库链路。
构造函数
Data?Set() |
初始化 DataSet 类的新实例。 |
Data?Set(Serialization?Info,Streaming?Context) |
初始化具有给定序列化信息和上下文的 DataSet 类的新实例。 |
Data?Set(Serialization?Info,Streaming?Context, Boolean) |
初始化 DataSet 类的新实例。 |
Data?Set(String) |
用给定名称初始化 DataSet 类的新实例。 |
属性
CaseSensitive |
获取或设置一个值,该值指示 DataTable 对象中的字符串比较是否区分大小写。 |
Container |
获取组件的容器。 |
DataSetName |
|
DefaultViewManager |
获取 DataSet 所包含的数据的自定义视图,以允许使用自定义的 DataViewManager 进行筛选、搜索和导航。 |
DesignMode |
获取指示组件当前是否处于设计模式的值。 |
EnforceConstraints |
获取或设置一个值,该值指示在尝试执行任何更新操作时是否遵循约束规则。 |
Events |
获取附加到该组件的事件处理程序的列表。 |
ExtendedProperties |
获取与 DataSet 相关的自定义用户信息的集合。 |
HasErrors |
获取一个值,指示在此 DataTable 中的任何 DataSet 对象中是否存在错误。 |
IsInitialized |
获取一个值,该值指示是否已初始化 DataSet。 |
Locale |
获取或设置用于比较表中字符串的区域设置信息。 |
Namespace |
获取或设置 DataSet 的命名空间。 |
Prefix |
获取或设置一个 XML 前缀,该前缀是 DataSet 的命名空间的别名。 |
Relations |
获取用于将表链接起来并允许从父表浏览到子表的关系的集合。 |
RemotingFormat |
为远程处理期间使用的 SerializationFormat 获取或设置 DataSet。 |
SchemaSerializationMode |
获取或设置 SchemaSerializationMode 的 DataSet。 |
Site |
获取或设置 DataSet 的 ISite。 |
Tables |
获取包含在 DataSet 中的表的集合。 |
方法(常用)
AcceptChanges() |
提交自加载此 DataSet 或上次调用 AcceptChanges() 以来对其进行的所有更改。 |
BeginInit() |
开始初始化在窗体上使用或由另一个组件使用的 DataSet。 初始化发生在运行时。 |
Clear() |
通过移除所有表中的所有行来清除任何数据的 DataSet。 |
Clone() |
复制 DataSet 的结构,包括所有 DataTable 架构、关系和约束。不要复制任何数据。 |
Copy() |
复制该 DataSet 的结构和数据。 |
CreateDataReader() |
为每个 DataTableReader 返回带有一个结果集的 DataTable,顺序与 Tables 集合中表的显示顺序相同。 |
CreateDataReader(DataTable[]) |
为每个 DataTableReader 返回带有一个结果集的 DataTable。 |
GetChanges() |
获取 DataSet 的副本,该副本包含自加载以来或自上次调用 AcceptChanges() 以来对该数据集进行的所有更改。 |
GetChanges(DataRowState) |
获取由 DataRowState 筛选的 DataSet 的副本,该副本包含上次加载以来或调用 AcceptChanges() 以来进行的所有更改。 |
GetDataSetSchema(XmlSchemaSet) |
获取数据集的 XmlSchemaSet 的副本。 |
GetHashCode() |
作为默认哈希函数。 |
GetType() |
获取当前实例的 Type。 |
GetXml() |
返回存储在 DataSet 中的数据的 XML 表示形式。 |
HasChanges() |
获取一个值,该值指示 DataSet 是否有更改,包括新增行、已删除的行或已修改的行。 |
事件
Disposed |
添加事件处理程序以侦听组件上的 Disposed 事件。 |
Initialized |
初始化 DataSet 后发生。 |
MergeFailed |
当目标和源 DataRow 的主键值相同且 EnforceConstraints 设置为真时发生。 |
三、知识点
DataSet、DataTable、DataRow之间有什么关系?
DataSet是数据集,DataTable是数据表,DataSet存储多个DataTable。DataSet和DataTable像是专门存储数据的一个容器,在你查询数据库得到一些结果时可以存在里面。DataRow表示DataTable中包含的实际数据,我们可以通过DataRow将数据添加到用DataColumn定义好DataTable中。
如何获取DataSet中的数据?
从DataSet中获取数据有两种方式:
1.第一种方式是通过指定DataSet中的具体DataTable的某行某列来获取数据,步骤如下:
①通过表名,从DataSet中获取指定的DataTable
②通过索引,从DataTable中获取指定的DataRow
③通过列名,从DataRow中获取指定列的数据
2.第二种方式是将DataSet中的数据直接绑定到数据展示控件上。
以构建科室-医生的树形结构为例,讲解如何运用DataSet创建树形结构,以下为部分重要关键步骤的讲解:
①指定SQL命令的命令文本;该命令分别按要求进行查询,查询结果将返回多张表;
②将SQL数据适配器的查询命令属性指向SQL命令;
③声明并实例化数据集(DataSet),用于保存查得的多张表;
④打开SQL连接;SQL数据适配器读取数据,并填充数据集;关闭SQL连接。
⑤声明科室数据表,对应数据集的表集合中的第1张数据表;(即Tables[0])
声明医生数据表,对应数据集的表集合中的第2张数据表;(即Tables[1])
⑥声明数据关系数组DataRelation[];
实例化数据关系,实现科室表、医生表之间的层次关系;
数据关系名称;(如KeShi-Doctor);
父表的被参照列为科室表的编号列;
子表的参照列为医生表的科室编号列;
不创建约束(父列上的唯一约束、子列上的外键约束);
(若还有下一层关系,可再次执行实例化数据关系及以下步骤)
⑦将数据关系数组批量加入数据集的关系集合(dataSet.Relations.AddRange (dataRelations))中;
⑧树形视图的节点集合清空;
⑨遍历院系数据表中的每一数据行;
声明并实例化科室节点,该节点对应当前某个科室;
科室节点的文本设为当前科室的名称;KeShiNode.Text = KeShiRow["Name"].ToString();
将科室节点加入树形视图的(根)节点集合;(this.trv_EducationUnit.Nodes.Add(KeShi)
借助先前定义的数据关系,遍历当前科室所在数据行的子行,即下属所有医生;
声明并实例化医生节点,该节点对应当前某个医生;
医生节点的文本设为当前医生的名称;
医生节点的标签(Tag)设为当前班级的编号;
医生节点加入当前科室节点的节点集合,成为第1级节点之一;(departmentNode.Nodes.Add(Doctor);)
(若还有下一级节点,则借助先前定义的xx关系,遍历当前xx所在数据行的子行,即下属所有xx;然后可再次执行声明并实例化该节点及以下部分)
四、示例代码
private void 手术申请管理_Load(object sender, EventArgs e) { SqlConnection sqlConnection = new SqlConnection(); sqlConnection.ConnectionString = "Server=DESKTOP-VKS7HLB;Database=手术麻醉系统;Integrated Security=sspi"; SqlCommand sqlCommand = new SqlCommand(); sqlCommand.Connection = sqlConnection; sqlCommand.CommandText = "SELECT * FROM tb_KeShi ;" + "SELECT * FROM tb_Docter;" + "SELECT * FROM tb_Nurse;" +"SELECT* FROM tb_MzDocter"; SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); sqlDataAdapter.SelectCommand = sqlCommand; DataSet dataSet = new DataSet(); sqlConnection.Open(); sqlDataAdapter.Fill(dataSet); sqlConnection.Close(); DataTable KeshiTable = dataSet.Tables[0]; DataTable DocterTable = dataSet.Tables[1]; DataTable NurseTable = dataSet.Tables[2]; DataTable MzDocterTable = dataSet.Tables[3]; DataRelation[] dataRelations = { new DataRelation ("Keshi_Docter" , KeshiTable.Columns["KSID"] , DocterTable.Columns["KSID"] , false) }; dataSet.Relations.AddRange(dataRelations); this.trv_shoushu.Nodes.Clear (); foreach (DataRow KeshiRow in KeshiTable.Rows) { TreeNode KeshiNode = new TreeNode(); KeshiNode.Text = KeshiRow["KSName"].ToString(); this.trv_shoushu.Nodes.Add(KeshiNode); foreach (DataRow DocterRow in KeshiRow.GetChildRows("Keshi_Docter")) { TreeNode DocterNode = new TreeNode(); DocterNode.Text = DocterRow["DOCName"].ToString(); KeshiNode.Nodes.Add(DocterNode); DocterNode.Tag = DocterRow["DOCID"]; } } }
五、效果截图
标签:href 导航 ted shiro containe clone val ndt 内存
原文地址:https://www.cnblogs.com/CTHK/p/9973156.html