ADO.NET的记忆碎片(七)

使用DataTable类的搜索和筛选功能
DataTable类公开了两个方法:Find和Select
Find方法:可以根据主键来查找数据行。Select方法:更类似于筛选器,根据更灵活的搜索条件返回多个数据行
在查询数据库获取信息时,假如使用如下SQL查询:
     select CustomerID,CompanyName,ContactName,Phone from Customers where CustomerID = 'Alen'
这个查询是根据主键来查询的,可以在ADO.NET中使用Find方法,根据主键值在DataTable中查找DataRow。
Find方法返回一个DataRow,就算有多个DataRow符合查询的要求,也只会返回第一个符合要求的DataRow。
使用示类:

string strConn, strSQL;//数据库连接字符串,和查询语句
strConn = "....";
strSQL = "....";
SqlDataAdapter da = new SqlDataAdapter(strSQL,strConn);
DataTable tb1 = new DataTable("Customers");
da.Fill(tb1);
tb1.PrimaryKey = new DataColumn[] { tb1.Columns["CustomerID"] };
DataRow row = tb1.Rows.Find("Alen");
Console.WriteLine(row["CompanyName"]);

DataTable类的Select方法根据类似的条件查找行。
假如希望查找下面SQL语句:
     select CustomerID,CompanyName,ContactName,Phone from Customers where Country = 'USA' and City <> 'Seattle'
这个复杂的条件查询,我们要是假设DataTable中数据也是要完成这样的查询,可以使用Select方法来完成,使用实例:

SqlDataAdapter da1 = new SqlDataAdapter(strSQL, strConn);
DataTable tb2 = new DataTable("Customers");
da.Fill(tb1);
string strFilter = "Country = 'USA' and City <> 'Seattle'";
foreach (DataRow r in tb2.Select(strFilter))
{
    Console.WriteLine(r["CompanyName"]);
}

可以看出来select方法还是很重要的,我们来做个select的用法步骤归纳:
1、先确定要筛选的目标结果
2、写出对应的SQL语句,能在数据库中运行,并得到想要的结果
3、把这个表的数据,用SqlDataAdapter的Fill方法缓存到内存的DataTable中
4、把SQL语句的Where部分提取出来赋值给strFilter字符串
5、调用Select方法:DataRow[] = tb2.Select(strFilter);会返回相应的结果集

 

 *有时候我们需要对结果排序,用SQL语句就很简单:
 *升序:
 *select CustomerID,CompanyName,ContactName,Phone from Customers order by City
 *降序:
 *select CustomerID,CompanyName,ContactName,Phone from Customers order by City desc
 *重载的Select方法可以接受一个排序顺序,使用实例: 

string strFilter1 = "Country = 'USA' and City <> 'Seattle'";
string strSort = "City Desc";
foreach (DataRow r in tb2.Select(strFilter1, strSort))
{
    Console.WriteLine(r["CompanyName"]);
}

 我们来做个select的用法步骤重新总结:
1、先确定要筛选的目标结果
2、写出对应的SQL语句,能在数据库中运行,并得到想要的结果
3、把这个表的数据,用SqlDataAdapter的Fill方法缓存到内存的DataTable中
4、把SQL语句的Where部分提取出来赋值给strFilter字符串,Order by部分提取出来给strSort字符串
5、调用Select方法:DataRow[] = tb2.Select(strFilter, strSort);会返回相应的结果集

DataView对象的出现
DataTable的Select方法功能强大而且很灵活,但是它还是有一些限制。
首先,这个动态的查询效率不高。然后Windows和Web不支持绑定到DataRow数组。
于是DataView对象出现了,可以很好的解决这些限制
DataView对象从DataTable中返回数据,数据库中的视图也是这个特性
DataView对象可以用来筛选、排序和搜索DataTable的数据,但是他们并非SQL查询。
不能用DataView来连接两个DataTable对象之间的数据。
DataView对象的确支持根据动态的条件筛选行,但是他们仅能访问一个DataTable,并且DataTable中的所有列都可以通过DataView得到
创建DataView对象
使用DataView来查看DataTable中的数据就必须将他和DataTable对象关联起来,有以下两个方法:

DataTable tb3 = new DataTable("Customers");
DataView vue;

//方法1,使用这个方法要注意一个问题,所关联的tb3的TableName必须是自己重新指定的,默认是不行的
vue = new DataView();
vue.Table = tb3;
//方法2
vue = new DataView(tb3);

DataView对象还有一个构造函数,其签名与DataTable对象的Select方法非常匹配,
一个复杂的构造函数在一行代码中设置了DataView的Table、RowFilter、Sort和RowStateFilter等属性
使用实例:

//分别设置Table、RowFilter、Sort和RowStateFilter等属性
vue.Table = tb3;
vue.RowFilter = strFilter1;
vue.Sort = strSort;
vue.RowStateFilter = DataViewRowState.ModifiedCurrent;

//一个复杂的构造函数
vue = new DataView(tb3, strFilter1, strSort,DataViewRowState.ModifiedCurrent);

使用DataRowView来查看DataView中的数据
DataView对象还公开了Count属性,可以看到DataView的行数
使用实例:

foreach (DataRowView rView in vue)
{
    Console.WriteLine(rView["CompanyName"]);
}

在DataView中搜索数据
我们前面已经使用了RowFilter和RowStateFilter属性来支持搜索的,DataView还支持Find和FindRows方法搜索
Find方法使用说明:一旦设置了DataView中的Sort属性,就可以调用它的Find方法,根据Sort属性中所指示的列来查找。
DataView的Find方法不返回DataRow或者是DataRowView对象,他会返回的是一个整型值,该值是对应于所在行的DataView的索引。如果没有就返回-1
Find方法使用实例:

vue = new DataView(tb3);
vue.Sort = "City";
int intIndex = vue.Find("Fran Wilson");
Console.WriteLine(vue[intIndex]["CompanyName"]);
//使用FindRows方法
vue = new DataView(tb3);
vue.Sort = "City";
DataRowView[] arows = vue.FindRows("Fran");
foreach (DataRowView rr in arows)
{
    Console.WriteLine(rr["CompanyName"]);
}

修改DataRowView对象
用DataRowView对象修改一行数据类似于修改DataRow对象的内容。与DataRow类一样,DataRowView对象也公开了BeginEdit,EndEdit,CancelEdit
和Delete方法,用DataRowView对象创建新数据行与创建新DataRow有一点不同。DataView有一个AddNew方法,该方法返回一个新的DataRowView
直到DataRowView对象调用EndEdit方法,新行才被真正地创建到DataTable中,使用实例:

//添加一新行
DataRowView rowView = vue.AddNew();
rowView["CustomerID"] = "asdf";
rowView.EndEdit();
//修改一行
rowView.BeginEdit();
rowView["CustomerID"] = "刘明丰";
rowView.EndEdit();
//删除一行
rowView.Delete();

使用DataView创建新的DataTable
使用实例

DataTable newTable = vue.ToTable("CreateNewTable");

转载于:https://www.cnblogs.com/lmfeng/archive/2012/02/02/2335876.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mos 控制交流_电机控制器母线电容的设计选型

母线电容的定义在电机控制器中&#xff0c;电池包的直流电作为输入电源&#xff0c;需要通过直流母线与电机控制器连接&#xff0c;该方式叫DC-LINK或者直流支撑&#xff0c;其中的电容我们称之为母线电容或者支撑电容或者DC-Link电容。由于电机控制器从电池包得到有效值或者峰…

方法的返回值类型是object_JavaScript中如何判断类型

1. typeoftypeof (整数/小数/自然对数Math.LN2/正无穷大数Infinity) > numbertypeof NaN > numbertypeof (function(){}) > functiontypeof Math.sin > functiontypeof undefined > undefinedtypeof xxxx > stringtypeof > stringtypeof true/false >…

从mysql8.0读取数据并形成pandas dataframe类型数据,精确定位行列式中的元素,并读取...

from pandas import * import pandas as pd from sqlalchemy import create_engine engine create_engine("mysqlpymysql://root:wenwajiao127.0.0.1:3306/ryandb?charsetUTF8MB4")#charset设置用于mysql8.0的新型字符集&#xff0c;清根据你的需要设定 print(engi…

c++代码整洁之道pdf_别再问如何用Python提取PDF内容了!

公众号后台回复“图书“&#xff0c;了解更多号主新书内容作者&#xff1a;陈熹来源&#xff1a;早起Python导读大家好&#xff0c;在之前的办公自动化系列文章中我们已经详细介绍了&#x1f449;如何使用Python批量处理PDF文件&#xff0c;包括合并、拆分、水印、加密等操作。…

[html] 你知道什么是粘性布局吗?

[html] 你知道什么是粘性布局吗&#xff1f; MDN 是这样解释的&#xff1a;Sticky positioning can be thought of as a hybrid of relative and fixed positioning. A stickily positioned element is treated as relatively positioned until it crosses a specified thresh…

vim编辑模式_sublime vim模式和快捷键

vim的四种模式及模式切换vim一共有4个模式&#xff1a;正常模式 (Normal-mode) 插入模式 (Insert-mode)命令模式 (Command-mode)可视模式 (Visual-mode)正常模式启动vim后默认处于正常模式。不论位于什么模式&#xff0c;按下<Esc>键(有时需要按两下&#xff09;都会进入…

windows下启动activemq闪退

本地测试activemq时,双击bin下的activemq.bat,命令行出现闪现问题 解决:在当前目录启动命令行 输入 activemq-admin.bat start 可以正常启动 原因暂时还不知道 转载于:https://www.cnblogs.com/jiushixihuandaqingtian/p/11393557.html

win7下注册s2008

今天打开vs居然提示获取了&#xff0c;按照xp的办法没法注册&#xff0c;真是纠结啊。结果点击卸载按钮就给卸载了。不得不重新安装。 百度一搜&#xff0c;才知道升级注册的按钮被屏蔽了。╮(╯▽╰)╭&#xff0c;网上有如下代码搜索窗口并把它显示出来。 关键函数如下&#…

python读取txt文件_python实现读写txt文件的几种方法

一、读写模式&#xff1a;w&#xff1a;向文件中写入内容&#xff0c;w会清空原来文本内容a&#xff1a;向文件中追加内容r&#xff1a;从文件中读取内容wb&#xff1a;以二进制形式写入内容。rb&#xff1a;以二进制形式读文件内容ab&#xff1a;以二进制形式追加内容a、r、w&…

[html] html5的Notification桌面通知如何请求权限?

[html] html5的Notification桌面通知如何请求权限&#xff1f; Notification.requestPermission(callback);个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

python代码转换为pytorch_pytorch使用 to 进行类型转换方式

在程序中&#xff0c;有多种方法进行强制类型转换。本博文将介绍一个非常常用的方法&#xff1a;to()方法。我们通常使用它来进行GPU和CPU的类型转换&#xff0c;但其实也可以用来进行torch的dtype转换。常见方法&#xff1a;tensor.to(‘cuda:0)先看官网介绍&#xff1a;**Per…

Oracle 时区(TimeZone )-- DST

Daylight Savings Time (DST) 指 定一个时区的时候&#xff0c;可以使用数字(-05:00)&#xff0c;缩写(EST)或者地区名称(US/Eastern)。 在多数情况下&#xff0c;它们的效果是一样的。但是在DST的处理过 程中&#xff0c;如果使用地区名称来指定时区&#xff0c;ORACLE会自动进…

centos7升级openssh

注意&#xff1a; openssl版本(openssl版本要大于1.0.1&#xff0c;zlib版本要大于1.1.4) 一、安装依赖包 yum -y install gcc make perl # zlib zlib-devel yum install -y gcc openssl-devel pam-devel rpm-buildyum install telnet-ser…

java 复制对象_Java程序员必备:序列化全方位解析

前言 相信大家日常开发中&#xff0c;经常看到Java对象“implements Serializable”。那么&#xff0c;它到底有什么用呢&#xff1f;本文从以下几个角度来解析序列这一块知识点~什么是Java序列化&#xff1f;为什么需要序列化&#xff1f;序列化用途Java序列化常用API序列化的…

[html] history和hash两种路由方式的最大区别是什么?

[html] history和hash两种路由方式的最大区别是什么&#xff1f; hash 只在当前URL内刷新&#xff0c;history支持多个URL个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端…

decimal类型对象里面定义什么类型_奥斯塔罗 单身开启桃花雷达 现阶段的我适合什么类型的对象?...

相信单身朋友总好奇下一位对象是否出现了&#xff1f;或是这么多人我该如何察觉下一位对象呢&#xff1f;如果单身的你正寻找对象中那就跟奥斯老师一起来看看下一位对象的个性与特征吧&#xff01;&#xff1c;&#xff1c;直觉选一张牌&#xff1e;>牌l选择到这组牌的朋友&…

Centos中查找文件、目录、内容

1、查找文件 find / -name filename2、查找文件夹&#xff08;目录&#xff09; find / -name path -type d3、查找内容 find . | xargs grep -ri content3.1、只显示文件名称 find . | xargs grep -ril content 只显示文件名称转载于:https://www.cnblogs.com/xiaohaojs/p/114…

[html] 在网格布局中都有哪些概念呢?比如:网格线

[html] 在网格布局中都有哪些概念呢&#xff1f;比如&#xff1a;网格线 容器&#xff1a;采用网格布局的区域项目&#xff1a;容器内部采用网格定位的子元素行&#xff1a;容器里面的水平区域列&#xff1a;容器里面的垂直区域单元格&#xff1a;行和列的交叉区域网格线&#…

win7系统怎么拷贝到u盘_Win7系统电脑无法识别U盘启动盘怎么办?

U盘想必大家不会陌生&#xff0c;通常会用来存储一些资料便于移动办公&#xff0c;有些小伙伴也会将其变更成U盘启动盘&#xff0c;帮助电脑重装系统。但是有用户反馈U盘插入电脑后无法识别启动&#xff0c;这要怎么办呢&#xff1f;其实很简单&#xff0c;下面小编就给大家带来…

GStreamer基础教程07 - 播放速率控制

摘要 在常见的媒体播放器中&#xff0c;通常可以看到快进&#xff0c;快退&#xff0c;慢放等功能&#xff0c;这部分功能被称为“特技模式&#xff08;Trick Mode&#xff09;”&#xff0c;这些模式有个共同点&#xff1a;都通过修改播放的速率来达到相应的目的。 本文将介绍…