关于DataRow和DataColumn的一点个人简单理解

PS:其实这个放在这里只是当作一个我对于自己不懂的地方所作的一个记录而已。如果有什么错误的或者不当的地方欢迎大家指正。

关于DataRow和DataColumn,其实就是DataTable的行与列,作为DataTable的两个集合元素存在,用类似于坐标系里x与y的方法确定唯一的表值。
本来以为两个都是同等性质的,不过无意中的问题说明了它们不是单纯的差不多。
使用SQL语句建立表,但忘记了写进内容:CREATE TABLE Testtable(ID int PRIMARY KEY,Description Char(30));然后用DataReader当然什么都不会返回。
用VS.NET 2003的Server Explorer查看表,并没提示错误。有列,但没有行内容,也就是说这样的“空表”是可以存在的。那试着换一下SQL语句:CREATE TABLE Testtable;或者CREATE TABLE Testtable();都提示语法错误。由此可见作为表的基础是列。
又由DataReader的工作方式来看,是个以行为元素遍历的过程,其中的数据成员是依列进行分组,输出也就是两个嵌套的循环:
foreach (DataRow i in dt.Rows)
{
foreach (DataColumn j in dt.Columns)
{
Console.Write("\t{0}",i[j]);
}
Console.WriteLine();
}
所有行都以列为结构,其实访问其实是在访问行,列只是制定其数据所在的位置名称,可以抽象成这样:
struct Row
{
Type Column_1;
Type Column_2;
...
Type Column_n;
}
由此引出了一个建立在上面的问题:行与列在表里的添加。
1.DataRow的添加
比较常规,就是添加元素而已,可以看作是把上面的Row[]添加一个元素。
具体方法大概如下:
DataRow newRow=dt.NewRow(); //调用DataTable dt方法NewRow()声明建立一个新行,得到一个DataRow实例
...
newRow["(Column Name...)"]="..."; //为DataRow写入数据
...
dt.Rows.Add(newRow); //添加进dt
这样就完了。
2.DataColumn的添加
似乎也简单。事实上却是dt里并没有NewColumn()这个方法。
两种思路:
a.在SQL里面内建,这种思路在这里暂时不讨论,有兴趣的可以试一下;
b.在程序里面找到类似的Add()方法调用;
这里有必要说明一下DataColumn和DataColumnCollection两个类的关系:
实际上表建立框架的是DataColumnCollection,是DataColumn的一个集合,包含一组Column对象,也就是说,要为表添加一列,需要在表框架的DataColumnCollection上调用Add()方法而不是在dt上添加作为遍历的元素,因为列独立出来其实也是以行->列的方式遍历的。思路有了,于是具体实现如下:
DataColumnCollection dcc=ds.Tables["Employees"].Columns; //DataSet ds,返回DataColumnCollection对象集合
DataColumn newColumn=new DataColumn(); //建立一个新列
newColumn=dcc.Add("FullName",System.Type.GetType("System.String"),"FirstName+' '+LastName"); //向表Employees里插入列,在这里用的是DataColumnCollection.Add(string ColumnName,Type ColumnType,string Expression)方法插入列,这里的Expression是指的建立的新列的值建立规则
至此,列插入结束。

作为一个小小的讨论,DataRow和DataColumn这样简单介绍一下,希望能对大家有点帮助。

时间: 2024-09-08 11:13:42

关于DataRow和DataColumn的一点个人简单理解的相关文章

对周鸿祎用户体验阐释的简单理解

曾几何时,奇人周鸿祎对用户体验作出了自己的理解:"要超出用户预期,能够给用户带来惊喜;要能够让用户有所感知;好的用户体验,是从细节开始,并贯穿于每一个细节."对于这一经典阐释,每个人应该都有不同的理解,笔者今天就来谈谈自己的看法. 第一点的核心超出预期,带来惊喜. 我们在做网站或者是在做产品营销时,往往只考虑的是用户的当下感受,也就是指提供了他所需要的,只是解决了最需要解决的问题.其实,这应该算是被动式的一种满足用户.只是解决了用户要什么给什么,在用户的需求满足后还有什么可以延伸的需求

委托/事件/线程传参简单理解

写了很多代码,但几乎都没写过委托/事件/线程传参方面应用的代码 因此自己总很容易理解后又遗忘 今天又重温了一下 因此以最简单的方式的代码方式写下来帮助理解 1.线程传参[简单几行代码]    1 static void Main(string[] args) 2         { 3             if (ThreadPool.QueueUserWorkItem(new WaitCallback(Program.WritePara), "这是传进去的参数")) 4     

Javascript闭包简单理解

原文:Javascript闭包简单理解 提到闭包,想必大家都早有耳闻,下面说下我的简单理解.说实话平时工作中实际手动写闭包的场景并不多,但是项目中用到的第三方框架和组件或多或少用到了闭包.所以,了解闭包是非常必要的.呵呵... 一.什么是闭包简而言之,就是能够读取其他函数内部变量的函数.由于JS变量作用域的特性,外部不能访问内部变量,内部可以外部变量. 二.使用场景1. 实现私有成员.2. 保护命名空间,避免污染全局变量.3. 缓存变量. 先看一个封装的例子: var person = func

简单理解Java的抽象类_java

在自上而下的继承层次结构中,位于上层的类更具有通用性,甚至可能更加抽象.从某种角度看,祖先类更加通用,它只包含一些最基本的成员,人们只将它作为派生其他类的基类,而不会用来创建对象.甚至,你可以只给出方法的定义而不实现,由子类根据具体需求来具体实现. 这种只给出方法定义而不具体实现的方法被称为抽象方法,抽象方法是没有方法体的,在代码的表达上就是没有"{}".包含一个或多个抽象方法的类也必须被声明为抽象类. 使用 abstract 修饰符来表示抽象方法和抽象类. 抽象类除了包含抽象方法外,

Android View事件分发和消费源码简单理解

Android View事件分发和消费源码简单理解 前言: 开发过程中觉得View事件这块是特别烧脑的,看了好久,才自认为看明白.中间上网查了下singwhatiwanna粉丝的读书笔记,有种茅塞顿开的感觉. 很重要的学习方法:化繁为简,只抓重点. 源码一坨,不要指望每一行代码都看懂.首先是没必要,其次大量非关键代码会让你模糊真正重要的部分. 以下也只是学姐的学习成果,各位同学要想理解深刻,还需要自己亲自去看源码. 2.源码分析 由于源码实在太长,而且也不容易看懂,学姐这里就不贴出来了,因为没必

让工作节奏慢一点, 再简单的工作也能做出大成就

     快,是当下的工作主旋律.拿到任务,快刀斩乱麻,达成目标交差.甚至同时处理多个事务,一天到晚忙前忙后.一旦闲下来,便觉缺少了存在感.这未必是什么好事,事情做得比较浅,经验不能有效的积累,最终其实还是快不了,还反而让情绪受工作牵制.相对于这种做事做到恰到好处的做法,我更喜欢要做就往大了做.       从一个任务的表面来看,做出结果就算完事,这是结果导向.你要一份报告,我就给你一份报告.解一个Bug, 就保证这个Bug正常,扩展一下没有问题就好.如果真得很紧急,这样做是理所当然,这时候慢下

分享我对代码命名的一点思考和理解

一个软件最后都会落实到代码.而代码,其背后的架构设计或设计思想或模式固然重要,但我觉得更重要的东西则是良好的命名.混乱或错误的命名不仅让我们对代码难以理解,更糟糕的是,会误导我们的思维,导致对代码的理解完全错误.相反,良好的命名,则可以让我们的代码非常容易读懂,也能向读者正确表达事物以及逻辑的本质,从而使得代码的可维护性就大大增强,读命名好的文章是非常流畅的,会有一种享受的感觉. 另外一点也许大家还没感受到,那就是良好的命名,以及良好的命名习惯,由于我们总是对每个概念的名称要求非常苛刻,我们会思

架构设计中服务层的简单理解

   在ddd设计中我们经常会提到服务层,服务层是什么?职责是什么?有什么好处?.    先看简单的层次图(注:这里并没有考虑其他多余的领域逻辑数据层存储,或者UOW这些细节)    我的理解是服务层是处于我的应用程序业务层和表现层之间的应用程序边界,边界可能是很薄的一层类设计或者是分布式服务网络跃点.它是一个与技术无关的名词.由表现层直接调用,契约,执行命令(修改状态(CUD))或者是查询返回dto(数据迁移对象)(cms,命令-查询分离).他对业务逻辑层接口很清楚,组织业务逻辑 微服务形成宏

简单理解js的冒泡排序_javascript技巧

关于排序,其实不管是哪种语言,都有它内置的排序函数,我们要用的时候调用就行了,既然如此,我们为什么还要讲这个东西呢?我想,其实,我们讲排序更多是在于排序中包含的思想算法,因为,算法对于计算机来说相当重要,一个好的算法能够让计算机的效率达到事半功倍的效果,所以,算法是计算机语言中一门相当热门的课程,它所代表的计算机思维也是很值得我们去深入研究的. 我也知道,关于我标题中的排序,博客园中的很多作者都写过详细解释的文章,可能,笔者本人认为自己的理解更能体现出这个排序的工作原理吧,所以,笔者也就大惭不愧