在DataTable中进行数据查询 (转)
在实际编程工程中,常常遇到这样的情况: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中进行数据查询 (转)相关推荐
- 将DataTable中的数据导入到数据库中
上次在根据excel的文件的路径提取其中表的数据到DataSet中 一文中介绍了将Excel文件中的数据读取到DataSet中的方法,今天我来介绍下我曾经在项目中用到的一个将DataTable中的数据 ...
- DataTable中的数据导出Excel文件
DataTable中的数据导出Excel文件 View Code ///<summary> /// 将DataTable中的数据导出到指定的Excel文件中 ///</summary ...
- 将DataTable中的数据保存到Excel (二) 使用NPOI
文章目录 背景 1 NPOI 简介 2 使用NPOI 2.1 创建一个简单的工作簿 2.2 简单的读取内容 2.3 将DataTable数据导出到Excel(NPOI) 2.4 Excel(NPOI) ...
- 将DataTable中的数据保存到Excel
如何快速将DataTable中的数据保存到Excel 遇到的问题 ① 保存到Excel的时间比较长,用户体验差 ② 保存失败(原因:Excel程序打开:或前一次调用Excel线程没有关闭,等) 开发环 ...
- aspx页面中,DataTable中的数据导出到Excel文件中
方法一:直接将DataTable中的数据通过GridView导出到Excel中,并显示下载界面 public void ExportToExcel(DataTable tab,string filen ...
- python查数据库写入excel_【Python】将数据库中的数据查询出来自动写入excel文档...
近期每天都要监控一个数据. 第一个版本是这样的: 每天新增一个文档来汇总这个数据.这样搞了几天之后,过了一个周末,过来突然发现数据变多了很多,这个时候要调整策略,直接一个文档汇总出要的数据就可以了. ...
- MySQL中的数据查询
文章目录 1 简单查询 1.1 查询所有字段数据 1.2 查询指定字段数据 1.3 DISTINCT查询 1.4 IN查询 1.5 BETWEEN AND查询 1.6 LIKE模糊查询 1.7 对查询 ...
- datatable 导入mysql 解决_将DataTable中的数据导入到数据库中
上次在 小小的改动即可. /// /// 将DataTable中数据写入数据库中 /// /// /// public static bool WriteDataToDB(DataTable dt) ...
- python将数据写入excel_【Python】将数据库中的数据查询出来自动写入excel文档
近期每天都要监控一个数据.第一个版本是这样的: 每天新增一个文档来汇总这个数据.这样搞了几天之后,过了一个周末,过来突然发现数据变多了很多,这个时候要调整策略,直接一个文档汇总出要的数据就可以了. 这 ...
最新文章
- Python基础高级用法,必须要掌握的知识点
- C++word break断字(基于单词或字符串)(附完整源码)
- java运行python3_python写脚本并用java调用python(三)
- mysql 分区信息查看
- mysql完成未完成_MYSQL SQL模式 (未完成)
- Dell做RAID配置图文全教程
- 关于VC预定义常量_WIN32,WIN32,_WIN64等预定义宏的介绍(整理、转载)
- ansys怎么使用anand模型_详细剖析ANSYS有限元分析这个软件
- python3 ocr_python3 ocr 识别图片文字(CSDN验证码90%通过)
- solve det(I + uv^t)
- 达梦数据库修改字段长度_达梦数据库,国产数据库替代的希望之星
- xp系统计算机启动时灰色界面,windows xp系统下屏幕开始按钮变成灰色怎么处理
- Flutter作插件的研究(学习)记录
- 一步一步学JAVA(16)-IO流
- 这是最好的企业管理手册
- 2021-04-26 PNP三极管
- 读书寄语:难过时就抱抱自己,时间治愈的,都是愿意自渡的人
- 转:管理者必备技能之全局观:找出复杂环境中的秩序
- HTTP 所有状态码
- hihoCoder 1095 HIHO Drinking Game 微软苏州校招笔试 12月27日
热门文章
- Java_String
- Mounting A Windows Share On AIX Using CIFS
- bluR blUr bLur...闷的时候就听Blur
- es分页查询重复数据_ES优化 - 巨量数据如何提高查询性能
- 高度不定垂直居中_你真的能写好CSS垂直水平居中吗?
- 代码画简单动物_[500行代码学懂OpenGL]之六数学知识
- Spring Cloud整合Nacos实现动态配置
- 池化技术及jdk的线程池讲解
- 在linux服务器搭建函数,linux ftp服务器搭建
- 计算机搜索文件时找不到搜索按钮,电脑搜不到文件怎么办?文件搜索软件用起来!...