DataSet与DataTable简介
来源:互联网 发布:重庆双桥网络花店 编辑:程序博客网 时间:2024/06/05 10:17
DataSet类表示内存中的数据集合,可以将它看成是一个简单的内存数据库,一个DataSet可以包含多个DataTable,并且可以包含DataTable之间的关系、限制等信息
DataSet中所有的数据表都可以通过它的Tables属性访问,DataSet中的数据的存储实际是通过DataTable来实现。
DataTable类是一个数据表在内存中的表示,它包括数据表的列定义,DataColumnCollection属性表示数据表中的列的定义,通过数据提供程序可以自动从数据库服务器获取该信息,也可以通过代码的形式创建该信息
当以代码的方式创建DataTable时,先创建必须的DataColumn对象,然后将它们添加到DataColumnCollection中。只有获得了DataTable的列定义后才能添加它的数据记录
DataRow表示DataTable中的一条记录,通过DataTable的NewRow()方法可以获得一个满足DataTable列定义的DataRow对象,然后再设置新的DataRow的数据
DataTable类表示一个数据表,可以通过两种方式创建:
(1)通过数据库操作从数据库获取
(2)直接通过DataTable的构造函数创建
编码创建DataTable的步骤:
创建DataTable对象
构建和设置DataColumn
将DataColumn添加到表
构建DataRow
将DataRow添加到表
接着可以循环遍历DataSet,输出每张table的每个元素。
代码示例:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;namespace CreateDataTable{ class Program { static void Main(string[] args) { //DataTable dt = BuildDataTable(); DataSet myDS = BuildDataSet(); //方法1 循环遍历输出dt for (int t = 0; t < myDS.Tables.Count; ++t)//遍历DataTable { //foreach (DataRow r in myDS.Tables[t].Rows)//遍历每个表的 行 for (int r = 0; r < myDS.Tables[t].Rows.Count; ++r) //遍历每个表的 行 { for (int i = 0; i < myDS.Tables[t].Columns.Count; ++i) { Console.Write(myDS.Tables[t].Rows[r][i] + "\t"); //遍历输出每一行的,每一列 //Console.WriteLine(myDS.Tables[t].Rows[r]["EmployeeName"]); //这样写可以指定输出“EmployeeName列” } Console.WriteLine(); } } Console.WriteLine(); //方法2 循环遍历输出dt foreach (DataTable dt in myDS.Tables)//遍历DataTable foreach (DataRow row in dt.Rows)//遍历每个表的 行 foreach (DataColumn col in dt.Columns) Console.WriteLine("表名:{0}\t 列名:{1}\t 内容:{2}", dt.TableName, col.ColumnName, row[col]);//遍历输出每一行的,每一列 //方法n:对以上可以结合实际情况灵活修改(灵活搭配使用for和foreach,以及单元格的内容) //单元格的内容有:myDS.Tables[t].Rows[r]["EmployeeName"],myDS.Tables[t].Rows[r][i], row[col]等形式。 Console.ReadKey(); } static DataSet BuildDataSet() { DataSet ds = new DataSet("员工数据集"); DataTable dt = BuildDataTable(); ds.Tables.Add(dt); DataTable dt1 = BuildDataTable(); ds.Tables.Add(dt1); return ds; } static DataTable BuildDataTable() { DataTable table=new DataTable(); //创建列,员工表:编号,姓名,出生日期,工资,部门编号 //编号列 DataColumn idColumn=new DataColumn(); idColumn.ColumnName="EmployeeID"; idColumn.DataType=typeof(string); idColumn.AllowDBNull=false; table.Columns.Add(idColumn); //姓名列 DataColumn nameColumn=new DataColumn(); nameColumn.ColumnName="EmployeeName"; nameColumn.DataType=typeof(string); nameColumn.AllowDBNull=false; table.Columns.Add(nameColumn); //出生日期列 DataColumn dateColumn=new DataColumn(); dateColumn.ColumnName = "DateOfBirth"; dateColumn.DataType = typeof(DateTime); dateColumn.AllowDBNull = true;//本句可省,默认可以为空 table.Columns.Add(dateColumn); //工资列 DataColumn salaryColumn=new DataColumn(); salaryColumn.ColumnName="Salary"; salaryColumn.DataType=typeof(double); //默认可以为空 table.Columns.Add(salaryColumn); //部门编号 DataColumn departmentColumn=new DataColumn(); departmentColumn.ColumnName="DepartmentID"; departmentColumn.DataType=typeof(int); //默认可以为空 table.Columns.Add(departmentColumn); //在此设置主键 table.PrimaryKey = new DataColumn[] { idColumn };//这里可以设置多个主键,放在idColumn后面即可 //事件 table.RowChanging += new DataRowChangeEventHandler(table_RowChanging); table.RowChanged += new DataRowChangeEventHandler(table_RowChanged); table.RowDeleting += new DataRowChangeEventHandler(table_RowDeleting); table.RowDeleted += new DataRowChangeEventHandler(table_RowDeleted); DataRow row=table.NewRow(); row["EmployeeID"]="E0001"; row["EmployeeName"] = "李娜"; row["DateOfBirth"]=DateTime.Now.AddYears(-30); row["Salary"]=6000; row["DepartmentID"]=1; Console.WriteLine("将要添加一行数据"); table.Rows.Add(row); Console.WriteLine("已经添加了一行数据"); Console.WriteLine("将要删除一行数据"); table.Rows.RemoveAt(0);//删除第一行数据 Console.WriteLine("已经删除一行数据"); row=table.NewRow(); row["EmployeeID"]="E0002"; row["EmployeeName"]="Jum"; row["DateOfBirth"]=DateTime.Now.AddYears(-20); row["Salary"]=60000; row["DepartmentID"]=3; table.Rows.Add(row); row=table.NewRow(); row["EmployeeID"]="E0006"; row["EmployeeName"]="SP"; row["DateOfBirth"]=DateTime.Now.AddYears(-21); row["Salary"]=7000; row["DepartmentID"]=6; table.Rows.Add(row); Console.WriteLine(); return table; } static void table_RowDeleted(object sender, DataRowChangeEventArgs e) { Console.WriteLine("RowDeleted事件"); } static void table_RowDeleting(object sender, DataRowChangeEventArgs e) { Console.WriteLine("RowDeleting事件"); } static void table_RowChanged(object sender, DataRowChangeEventArgs e) { Console.WriteLine("RowChanged事件"); } static void table_RowChanging(object sender, DataRowChangeEventArgs e) { Console.WriteLine("RowChanging事件"); } }}
效果:
其中,可以添加断点,并将光标放在myDS上,会出现一个放大镜的图标,点击可以以可视化工具查看,如下两图:
完!
- DataSet与DataTable简介
- net[datatable与dataset]
- DataSet与Datatable
- DataSet与DataTable
- DataSet与DataTable
- DataSet与DataTable区别
- DataTable、DataView、DataSet、DataReader简介
- DataSet与DataTable与DataView
- DataSet(DataTable)与XML互转
- DataSet(DataTable)与XML互转
- DataSet(DataTable)与XML互转
- DataSet与DataTable的区别
- DataSet与 DataTable 和 DataReader
- dataset 与 datatable 的区别
- DataSet与DataTable.DataReader区别
- C#之DataSet与Datatable
- 【C#】浅谈DataSet与DataTable
- DataSet与DataTable的区别
- 019Java 日期操作
- 如何查看某个端口被谁占用
- Java的NIO以及线程并发
- 在Win7系统上利用Simics安装Solaris 8 SPARC操作系统
- websocket与Spring整合
- DataSet与DataTable简介
- iOS--UILabel的使用方法详细
- ArcGIS影像技术之镶嵌数据集概览
- 晶体三极管工作原理讲解方法探讨
- SVN Merge(合并) 功能实践
- 计费问题c程序
- 移动端多人视频通话软件开发(七)-- 结语
- Apple Watch人机交互指南(中文版)
- 第13周 项目5-7 完整复制字符串