C# 关于DataSet, DataTable, DataRow 和DataColumn的区别和用法

简介:

今天做项目的时候有个地方需要在后台重组一下数据集,自然而然就会想到去重组一个DataSet出来了,因为做过的项目比较少,所以以前也没有遇到相关的情况,趁着这个机会自己也学习一下。

下面先用图例展示一下这四者的关系。其实很好理解。

wKiom1MEZ7uhwZkLAADJ1s1kVtI852.jpg

如图,DataSet里可以放多个DataTable,这就是平时我们再给ds赋完值之后会判断一下ds.table[0].Rows.count>0的原因,要指明是哪个table,其次就是DataTable里是由两部分组成的,一个是DataColumn,一个是DataRow,在我理解看来两者没有包含关系,非要说个联系出来,我觉得算是交叉吧,下面用代码来说明一下可能更一目了然些。

比如说我们要创建一个DataTable表,里面有[姓名],[年龄],[性别],[兴趣]这四列。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//首先创建一个DataTable对象
DataTable dt =  new  DataTable();
//new DataColumn创建了新的一列,并给这列起个列名,Add方法则是把这个新创建的列加入到创建的dt对象中
dt.Columns.Add( new  DataColumn( "姓名" ));
dt.Columns.Add( new  DataColumn( "性别" ));
dt.Columns.Add( new  DataColumn( "年龄" ));
dt.Columns.Add( new  DataColumn( "兴趣" ));
//由此我们创建了一个表,并且此表中有四列且分别有自己的名字
//下面我们需要往这个表里添加一些数据
//创建一个DataRow对象,注意这里是用dt的一个NewRow方法指向了dr对象,这样写的作用就是使dr对象成为了dt表的一行记录,并且这一行记录拥有四列
DataRow dr = dt.NewRow();
//分别给各列赋值
dr[ "姓名" ] =  "张三" ;
dr[ "性别" ] =  "男" ;
dr[ "年龄" ] =  "20" ;
dr[ "兴趣" ] =  "打篮球" ;
//将此条记录加入到dt中去
dt.Rows.Add(drTmp);
//将这个DataTable加入到DataSet中去
DataSet ds =  new  DataSet();
ds.Tables.Add(dt);

相信看完代码大家都能很好的理解这四个D之间的关系了,最终结果就是ds中的第一个数据表里有一条上述的记录。

不一定要像我上面写的那样实现,实现的方法有多种,根据项目的情况去选择用哪种。










本文转自 我不会抽烟 51CTO博客,原文链接:http://blog.51cto.com/zhouhongyu1989/1360744,如需转载请自行联系原作者

目录
相关文章
|
7月前
|
C#
C# DataTable不能通过已删除的行访问该行的信息
C# DataTable不能通过已删除的行访问该行的信息
|
7月前
|
安全 C#
C# List基本用法
C# List基本用法
|
1月前
|
Java 物联网 编译器
C#一分钟浅谈:.NET Core 与 .NET 5 区别
本文对比了 .NET Core 和 .NET 5,从历史背景、主要区别、常见问题及易错点等方面进行了详细分析。.NET Core 侧重跨平台支持和高性能,而 .NET 5 在此基础上统一了 .NET 生态系统,增加了更多新特性和优化。开发者可根据具体需求选择合适的版本。
47 7
|
19天前
|
C#
c#中switch case语句的用法
C#中的 `switch case`语句提供了一种简洁而高效的方式来处理多个条件分支。通过了解其基本语法、注意事项和高级用法,可以在实际开发中灵活运用 `switch case`,提高代码的可读性和维护性。希望本文能帮助你更好地理解和使用C#中的 `switch case`语句。
45 0
|
2月前
|
网络协议 网络性能优化 C#
C# 一分钟浅谈:UDP 与 TCP 协议区别
【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
50 1
|
1月前
|
开发框架 安全 .NET
C#面:Server.UrlEncode、HttpUtility.UrlDecode的区别
通过上述详细的解释和实例分析,相信大家对 `Server.UrlEncode` 和 `HttpUtility.UrlDecode` 的区别有了更深刻的理解,并能在实际开发中灵活运用。
35 0
|
6月前
|
存储 安全 Java
程序与技术分享:C#值类型和引用类型的区别
程序与技术分享:C#值类型和引用类型的区别
49 0
|
2月前
|
C# 开发者
【捞底干货】C#中equals和==运算符的区别
【捞底干货】C#中equals和==运算符的区别
59 1
|
3月前
|
C# 索引
C# 一分钟浅谈:接口与抽象类的区别及使用
【9月更文挑战第2天】本文详细对比了面向对象编程中接口与抽象类的概念及区别。接口定义了行为规范,强制实现类提供具体实现;抽象类则既能定义抽象方法也能提供具体实现。文章通过具体示例介绍了如何使用接口和抽象类,并探讨了其实现方式、继承限制及实例化差异。最后总结了选择接口或抽象类应基于具体设计需求。掌握这两者有助于编写高质量的面向对象程序。
127 5
|
4月前
|
C#
C#中的overload,overwrite,override的语义区别
以上概念是面向对象编程中实现多态性和继承的重要基石。理解它们之间的区别对于编写清晰、可维护的代码至关重要。
139 7