首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 冲浪宝典-> 冲浪技巧
不用SQL语句查询DataTable中的数据-.NET教程,数据库应用
作者:网友供稿 点击:626
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
在实际编程工程中,常常遇到这样的情况: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)




文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·不用SQL语句查询DataTable中的数据-.NET教程,数据库应用
·一个asp模板类-ASP教程,ASP应用
·谈有线电视系统前端设备调试
·表单提交“GET”的用法(form所有提交的值都会在地址栏出现)-ASP教程,ASP应用
·-48v整流器配置与直流系统设置
·c#下重写BUTTON控件-.NET教程,C#语言
·catv网络常见及疑难故障的分析处理
·常用路由协议的分析及比较
·mpls的体系结构与组网技术
·初级:.net框架下的MD5-.NET教程,.NET Framework
最新文章
·在线高速免费收看英超比赛的方法_冲浪技巧
·为什么成功的论坛和博客无法双管其下_站长心得
·做好一个好的网站策划_网络编辑
·windows live folders 新鲜试用_冲浪技巧
·什么样的网站放google adsense最理想_网赚技巧
·被google adsense 除名后怎么办_网赚技巧
·刘韧:站长站在草根与神话之间_站长访谈
·张弛有度的google adsense_google推广
·浏览器内嵌流媒体播放器silverlight_冲浪技巧
·高分辨率下界面布局的解决方案4_站长心得
相关主题
西部数码虚拟主机

友情链接
CNNIC 西部数码
万网 自助建站
虚拟主机 asp空间
域名注册 域名
域名申请 主页空间
论坛空间 网站空间
国际域名 虚拟空间
空间租用 DDOS防火墙
成都主机托管 四川主机托管
主机租用 服务器租用
网站目录 自助建站
虚拟主机 网址大全
软件下载
自助链接
虚拟主机资讯 特价虚拟主机
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
发表评论 打印  刷新     关闭