在实际编程工程中,常常遇到这样的情况:DataTable并不是数据库中的,或者DataTable尚未写到数据库,或者从数据库中读出的DataTable已经在本地被改动,又没有写回数据库(可能还要作其他改动),在这些情况下,要查询DataTable中的数据,强大的SQL语言就派不上用场了。

有些.NET程序员采取在数据库中建立临时表等方法来解决这类查询问题。而我觉得这种方法不可行,其实只要用.NET类库中提供的DataView类的强大功能(主要是用它的RowFilter属性),就能方便地解决这类查询问题。下面就举一个具体的例子,来说明如何不用SQL语句,用DataView的RowFilter属性来查询。

步骤一:建立一个C#的ASP.NET项目。先编写一个生成DataTable的函数MakeDataTable(),代码如下:

private DataTable MakeTable() { //生成DataTable 

System.Data.DataTable myDataTable = new DataTable("本地数据表"); DataColumn myDataColumn; DataRow myDataRow; //生成数据列 ID,商品名称,商品价格 

myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Int32"); myDataColumn.ColumnName = "ID"; myDataColumn.ReadOnly = true; myDataColumn.Unique = true; myDataTable.Columns.Add(myDataColumn); myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "商品名称"; myDataTable.Columns.Add(myDataColumn); myDataColumn = new DataColumn(); myDataColumn.DataType =System.Type.GetType("System.Decimal"); myDataColumn.ColumnName = "商品价格"; myDataTable.Columns.Add(myDataColumn); //为数据表添加数据行 

myDataRow = myDataTable.NewRow(); myDataRow["id"] = 1; myDataRow["商品名称"] = "足球"; myDataRow["商品价格"] =57.5; myDataTable.Rows.Add(myDataRow); myDataRow = myDataTable.NewRow(); myDataRow["id"] = 2; myDataRow["商品名称"] = "篮球"; myDataRow["商品价格"] =64.5; myDataTable.Rows.Add(myDataRow); myDataRow = myDataTable.NewRow(); myDataRow["id"] = 3; myDataRow["商品名称"] = "网球"; myDataRow["商品价格"] =6.5; myDataTable.Rows.Add(myDataRow); myDataRow = myDataTable.NewRow(); myDataRow["id"] = 4; myDataRow["商品名称"] = "网球拍"; myDataRow["商品价格"] =388.5; myDataTable.Rows.Add(myDataRow); //返回数据表 return myDataTable; }

步骤二:在aspx前台页面中添加一个DataGrid1,在后台代码的Page_Load中编写如下代码:

if(!this.IsPostBack) { Session["Table"]=MakeTable();  DataGrid1.DataSource=(DataTable)Session["Table"]; DataGrid1.DataBind(); } 

此时浏览页面,可以看到DataGrid中显示的表中数据。 ID 商品名称 商品价格 1 足球 57.5 2 篮球 64.5 3 网球 6.5 4 网球拍 388.5

步骤三:在aspx前台页面添加一个用来查询Label1,TextBox1和Button1。

步骤四:在查询按钮Button1单击事件中添加如下代码: DataTable dt=(DataTable)Session["Table"];

//为数据表建立一个数据视图

DataView dv=new DataView(dt);

//用RowFilter属性进行模糊查询

dv.RowFilter="商品名称 LIKE’%"+TextBox1.Text.Trim()+"%’";

DataGrid1.DataSource=dv;

DataGrid1.DataBind();
运行页面后在TextBox1中输入“网”,按查询按钮后 ,DataGrid显示的查询结果如下: ID 商品名称 商品价格 3 网球 6.5 4 网球拍 388.5

步骤五:在aspx前台页面上添加一个Label2控件,两个TextBox控件-TextBox1和TextBox2,以及一个“查询”按钮,Button2,用来查询用户输入的价格范围中在商品。
步骤六:在后台代码中为Button2按钮单击事件添加如下如下代码: DataTable dt=(DataTable)Session["Table"];

DataView dv=new DataView(dt); dv.RowFilter="商品价格>="+TextBox2.Text.Trim()+" AND 商品价格<="+TextBox3.Text.Trim(); DataGrid1.DataSource=dv; DataGrid1.DataBind(); 

用户在两个文本框中输入价格范围,10,70后,DataGrid1中显示的查询结果如下: ID 商品名称 商品价格 1 足球 57.5 2 篮球 64.5 可见,用DataView的RowFilter属性完全能达到SQL语句SELECT语句所实现的功能RowFilter中的查询语句与SQL语句中SELECT语句的语法和作用都极为相似,以下是摘自MSDN中关于RowFilter查询语句的语法说明:/

用户定义的值可以用在将与列值进行比较的表达式内。字符串值应放在单引号内。日期值应放在磅符号 (#) 内。对于数值,允许使用小数和科学记数法。例如:

"FirstName = ’John’"

"Price <= 50.00"

"Birthdate < #1/31/82#"

对于包含枚举值的列,将值强制转换为整数数据类型。例如:

"EnumColumn = 5"

运算符

使用布尔值 AND、OR 和 NOT 运算符时允许串联。可以使用括号来组合子句和强制优先级。AND 运算符优先于其他运算符。例如:

(LastName = ’Smith’ OR LastName = ’Jones’) AND FirstName = ’John’

在创建比较表达式时,允许使用下列运算符:

<

>

<=

>=

<>

=

IN

LIKE

在表达式中还支持下列算术运算符:

+(加)

-(减)

*(乘)

/(除)

%(模数)

字符串运算符

若要连接字符串,请使用 + 字符。字符串比较是否区分大小写由 DataSet 类的 CaseSensitive 属性的值来确定。但是,可以用 DataTable 类的 CaseSensitive 属性重写此值。

通配符

在 LIKE 比较中,* 和 % 两者可以互换地作为通配符。如果 LIKE 子句中的字符串包含 * 或 %,那么这些字符应用中括号([])对其进行转义。如果子句中有中括号,那么中括号字符应用中括号对其进行转义(例如 [[] 或 []])。在模式的开头和结尾,或者在模式的结尾,或在模式的开头允许使用通配符。例如:

"ItemName LIKE ’*product*’"

"ItemName LIKE ’*product’"

"ItemName LIKE ’product*’"

在字符串的中间不允许使用通配符。例如,不允许 ’te*xt’。

父/子关系引用

通过在列名称前面加 Parent,就可以在表达式中引用父表。例如,Parent.Price 引用父表的名为 Price 的列。

通过在列名称前面加一个 Child,就可以在表达式中引用子表中的列。但是,因为子关系可以返回多行,所以必须在聚合函数中包括对子列的引用。例如,Sum(Child.Price) 将返回子表中名为 Price 的列的总和。

如果某个表有多个子表,则语法是:Child(RelationName)。例如,如果某个表有两个子表,它们的名称分别为 Customers 和 Orders,则 DataRelation 对象被命名为 Customers2Orders,引用将为:

Avg(Child(Customers2Orders).Quantity)

聚合

支持下列聚合类型:

Sum(求和)

Avg(平均)

Min(最小值)

Max(最大值)

Count(计数)

StDev(统计标准偏差)

Var(统计方差)。

聚合通常沿着关系执行。通过使用上面列出的函数之一和上面“父/子关系引用”中详述的子表列,来创建聚合表达式。例如:

Avg(Child.Price) Avg(Child(Orders2Details).Price)
聚合也可以在单个表上执行。例如,若要为名为“Price”的列中的数字创建汇总,就用:

Sum(Price)

转载于:https://www.cnblogs.com/flyhigh1860/archive/2013/04/15/3021853.html

在DataTable中进行数据查询 (转)相关推荐

  1. 将DataTable中的数据导入到数据库中

    上次在根据excel的文件的路径提取其中表的数据到DataSet中 一文中介绍了将Excel文件中的数据读取到DataSet中的方法,今天我来介绍下我曾经在项目中用到的一个将DataTable中的数据 ...

  2. DataTable中的数据导出Excel文件

    DataTable中的数据导出Excel文件 View Code ///<summary> /// 将DataTable中的数据导出到指定的Excel文件中 ///</summary ...

  3. 将DataTable中的数据保存到Excel (二) 使用NPOI

    文章目录 背景 1 NPOI 简介 2 使用NPOI 2.1 创建一个简单的工作簿 2.2 简单的读取内容 2.3 将DataTable数据导出到Excel(NPOI) 2.4 Excel(NPOI) ...

  4. 将DataTable中的数据保存到Excel

    如何快速将DataTable中的数据保存到Excel 遇到的问题 ① 保存到Excel的时间比较长,用户体验差 ② 保存失败(原因:Excel程序打开:或前一次调用Excel线程没有关闭,等) 开发环 ...

  5. aspx页面中,DataTable中的数据导出到Excel文件中

    方法一:直接将DataTable中的数据通过GridView导出到Excel中,并显示下载界面 public void ExportToExcel(DataTable tab,string filen ...

  6. python查数据库写入excel_【Python】将数据库中的数据查询出来自动写入excel文档...

    近期每天都要监控一个数据. 第一个版本是这样的: 每天新增一个文档来汇总这个数据.这样搞了几天之后,过了一个周末,过来突然发现数据变多了很多,这个时候要调整策略,直接一个文档汇总出要的数据就可以了. ...

  7. MySQL中的数据查询

    文章目录 1 简单查询 1.1 查询所有字段数据 1.2 查询指定字段数据 1.3 DISTINCT查询 1.4 IN查询 1.5 BETWEEN AND查询 1.6 LIKE模糊查询 1.7 对查询 ...

  8. datatable 导入mysql 解决_将DataTable中的数据导入到数据库中

    上次在 小小的改动即可. /// /// 将DataTable中数据写入数据库中 /// /// /// public static bool WriteDataToDB(DataTable dt) ...

  9. python将数据写入excel_【Python】将数据库中的数据查询出来自动写入excel文档

    近期每天都要监控一个数据.第一个版本是这样的: 每天新增一个文档来汇总这个数据.这样搞了几天之后,过了一个周末,过来突然发现数据变多了很多,这个时候要调整策略,直接一个文档汇总出要的数据就可以了. 这 ...

最新文章

  1. Python基础高级用法,必须要掌握的知识点
  2. C++word break断字(基于单词或字符串)(附完整源码)
  3. java运行python3_python写脚本并用java调用python(三)
  4. mysql 分区信息查看
  5. mysql完成未完成_MYSQL SQL模式 (未完成)
  6. Dell做RAID配置图文全教程
  7. 关于VC预定义常量_WIN32,WIN32,_WIN64等预定义宏的介绍(整理、转载)
  8. ansys怎么使用anand模型_详细剖析ANSYS有限元分析这个软件
  9. python3 ocr_python3 ocr 识别图片文字(CSDN验证码90%通过)
  10. solve det(I + uv^t)
  11. 达梦数据库修改字段长度_达梦数据库,国产数据库替代的希望之星
  12. xp系统计算机启动时灰色界面,windows xp系统下屏幕开始按钮变成灰色怎么处理
  13. Flutter作插件的研究(学习)记录
  14. 一步一步学JAVA(16)-IO流
  15. 这是最好的企业管理手册
  16. 2021-04-26 PNP三极管
  17. 读书寄语:难过时就抱抱自己,时间治愈的,都是愿意自渡的人
  18. 转:管理者必备技能之全局观:找出复杂环境中的秩序
  19. HTTP 所有状态码
  20. hihoCoder 1095 HIHO Drinking Game 微软苏州校招笔试 12月27日

热门文章

  1. Java_String
  2. Mounting A Windows Share On AIX Using CIFS
  3. bluR blUr bLur...闷的时候就听Blur
  4. es分页查询重复数据_ES优化 - 巨量数据如何提高查询性能
  5. 高度不定垂直居中_你真的能写好CSS垂直水平居中吗?
  6. 代码画简单动物_[500行代码学懂OpenGL]之六数学知识
  7. Spring Cloud整合Nacos实现动态配置
  8. 池化技术及jdk的线程池讲解
  9. 在linux服务器搭建函数,linux ftp服务器搭建
  10. 计算机搜索文件时找不到搜索按钮,电脑搜不到文件怎么办?文件搜索软件用起来!...