ADO.NET DataSet、DataTable、DataRow、DataView的学习
对于一个datatable中的数据进行嵌套查询判断某几列数据是否相同从而确定这条数据是否一样,并确定他重复的次数COUNT1字段。
例如: DataTable dt = new DataTable();
dt.Columns.Add("NAME", System.Type.GetType("System.String"));
dt.Columns.Add("SEX", System.Type.GetType("System.String"));
dt.Columns.Add("BIRTHDAY", System.Type.GetType("System.String"));
dt.Columns.Add("BIRPLACE", System.Type.GetType("System.String"));
dt.Columns.Add("COUNT1", System.Type.GetType("System.Int32"));
假设一个dsBA数据集中包含很多信息,不乏有几行重复的数据
循环dsBA给dt加入数据
for (int i = 0; i < dsBA.Tables[0].Rows.Count; i++)
{
DataRow dr = dt.NewRow();
dr["NAME"] = dsBA.Tables[0].Rows[i]["NAME"];
dr["SEX"] = dsBA.Tables[0].Rows[i]["SEX"];
dr["BIRTHDAY"] = dsBA.Tables[0].Rows[i]["BIRTHDAY"];
dr["BIRPLACE"] = dsBA.Tables[0].Rows[i]["BIRPLACE"];
dr["COUNT1"] = 1;//初始化不管
dt.Rows.Add(dr);
}
那么对dt的排序操作如下:(必须先对dt排序)
#region 操作dt
//首先对dt要按名称排序这样有利于内层循环做判断
dt.DefaultView.Sort = "NAME asc";
DataTable dt2 = dt.DefaultView.ToTable(); DataTable dtCopy = dt2.Clone();
//判断dt中数据人员四项是否有相同的的,如果有相同的则代表同一个人,
//如果次数大于1则保存该人员信息和总计次数,并输出结果
int count = 1;//定义count保存重复的次数,确定人员出访次数
bool flag = false;//是否结束内存循环和内层循环是否结束
for (int i = 0; i < dt2.Rows.Count; i++)
{
count = 1;
string name1 = dt2.Rows[i]["NAME"].ToString();
string sex1 = dt2.Rows[i]["SEX"].ToString();
string birthday1 = dt2.Rows[i]["BIRTHDAY"].ToString();
string birplace1 = dt2.Rows[i]["BIRPLACE"].ToString();
for (int j = i+1; j < dt2.Rows.Count; j++)
{
string name2 = dt2.Rows[j]["NAME"].ToString();
string sex2 = dt2.Rows[j]["SEX"].ToString();
string birthday2 = dt2.Rows[j]["BIRTHDAY"].ToString();
string birplace2 = dt2.Rows[j]["BIRPLACE"].ToString();
if (name1 == name2 && sex1 == sex2 && birplace1 == birplace2 && birthday1 == birthday2)
{
count++;//次数加1
flag = true;//继续循环
continue; //
}
else
{
flag = false;//表示没有相同的
break;//推出本层循环继续外围循环
}
}
if (count > 1&&flag==false)
{
DataRow dr = dtCopy.NewRow();
dr["NAME"] = dt2.Rows[i]["NAME"];
dr["SEX"] = dt2.Rows[i]["SEX"];
dr["BIRTHDAY"] = dt2.Rows[i]["BIRTHDAY"];
dr["BIRPLACE"] = dt2.Rows[i]["BIRPLACE"];
dr["COUNT1"] = count;
dtCopy.Rows.Add(dr);
}
i = i + count;//从不重复的位置开始继续进行外层循环
}
#endregion
ADO.NET DataSet、DataTable、DataRow、DataView的学习的更多相关文章
- DataSet & DataTable &DataRow 深入浅出
本篇文章适合有一定的基础的人去查看 ,最好学习过一定net 编程基础在来查看此文章. 1.概念 DataSet是ADO.NET的中心概念.可以把DataSet当成内存中的数据库,DataSet是不依赖 ...
- DataSet - DataTable - DataRow 读取 xml 文件 + 搜索
DataSet ds = XmlHelper.GetDataSetByXml(AppDomain.CurrentDomain.BaseDirectory + "/Config/ConfigN ...
- DataTable,DataSet,DataRow与DataView
DataTable和DataSet可以看做是数据容器,比如你查询数据库后得到一些结果,可以放到这种容器里,那你可能要问:我不用这种容器,自己读到变量或数组里也一样可以存起来啊,为什么用容器?原因是,这 ...
- DataSet,DataTable,DataColumn,DataRow的常用操作
DataSet 这个玩意没什么好讲的,当ado.net查询出有多张表集合的数据返回时,这个时候就会使用到DataSet. DataTable //表之间直接赋值 dt2=dt1; 两者指向同一内存空间 ...
- dataTable 、dataView、Dataset 区别
dataTable .dataView.Dataset 区别的经典回答 1.DataView是DataTable的表示,DataTable表里的记录是没有顺序的,但显示可以有不同顺序(DataVIew ...
- 第八周学习笔记-ADO.Net中DataTable的应用
ADO.Net中DataTable的应用 一.知识点描述 1.概述:DataTable是一个临时保存数据的网格虚拟表(表示内存中数据的一个表),是ADO.Net库中的核心对象. 2.DataTabl ...
- dataset datatable datacolums datarow
DataSet 表示数据在内存中的缓存. 属性 Tables 获取包含在 DataSet 中的表的集合. ds.Tables["sjxx"] DataTable 表示内存中数据的 ...
- C#使用DataSet Datatable更新数据库的三种实现方法
本文以实例形式讲述了使用DataSet Datatable更新数据库的三种实现方法,包括CommandBuilder 方法.DataAdapter 更新数据源以及使用sql语句更新.分享给大家供大家参 ...
- 使用DataSet Datatable 更新数据库的三种方式
1:自动生成命令的条件 CommandBuilder 方法a)动态指定 SelectCommand 属性b)利用 CommandBuilder 对象自动生成 DataAdapter 的 DeleteC ...
- DataSet,DataTable排序(转载)
DataSet,DataTable排序 关于对已经绑定的DataSet的排序的问题: DataSet ds=new DataSet();DataView dv=new DataView();dv. ...
随机推荐
- 被Oracle全局暂时表坑了
今天凌晨4点多钟,在客户现场的负责人打电话给我,说非常奇怪,下载功能时快时慢.此下载功能非常复杂,之前一直是我优化,在半梦半醒中打开电脑,通过远程看着现场同事在PL/SQL developer中操作. ...
- 【取对数+科学计数法】【HDU1060】 N^N
Leftmost Digit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- CSS3实现图片鼠标悬浮放大效果
.excerpt .focus a img{ -webkit-transition: all ease .3s; transition: all ease .3s }.excerpt .focus a ...
- 追加addclass和removeclass
//addclass Base.prototype.addclass=function(classname){ for(var i=0;i< ...
- Java Junit4测试功能
作为一个java新手,有些东西有必要记下来,以便以后方便查看. 为了让自己有养成良好的习惯,新建一个测试的文件夹:test在项目上右击→New→Folder.新建一个test文件夹. 接下来要在你需要 ...
- 创建一个基本的 Win32 窗口
#include <Windows.h> //Forward declarations bool InitMainWindow(HINSTANCE, int); LRESULT CALLB ...
- Word Search II
Given a 2D board and a list of words from the dictionary, find all words in the board. Each word mus ...
- Ubuntu第一次使用调教教程
Ubuntu第一次使用调教教程 Ubuntu不允许root用户登录,这让人很蛋疼.下面的方法就是让Ubuntu接受以root身份登录.此外,ubuntu默认没有安装ssh的,所以不能进行ssh远程登录 ...
- Gradle方式构建Java多项目
0: 安装IDEA:Linux 上只需下载IDEA的包 并且将路径配置在PATH全局变量中./etc/profile export PATH=$PATH:/opt/Software/IDEA/idea ...
- javascript中的动画的实现以及运动框架的编写(1)
大家知道js可以做出好多很漂亮的动画,看上去很神奇,其实原理很简单,今天就讨论一下js动画的实现以及如何编写可以反复重用的运动框架. 首先做一个简单的例子,我这里有一个长50px 宽20px的长条形d ...