国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > 綜合 > 正文

不用SQL語(yǔ)句查詢DataTable中的數(shù)據(jù)

2024-07-21 02:23:13
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
在實(shí)際編程工程中,常常遇到這樣的情況:datatable并不是數(shù)據(jù)庫(kù)中的,或者datatable尚未寫到數(shù)據(jù)庫(kù),或者從數(shù)據(jù)庫(kù)中讀出的datatable已經(jīng)在本地被改動(dòng),又沒(méi)有寫回?cái)?shù)據(jù)庫(kù)(可能還要作其他改動(dòng)),在這些情況下,要查詢datatable中的數(shù)據(jù),強(qiáng)大的sql語(yǔ)言就派不上用場(chǎng)了。

有些.net程序員采取在數(shù)據(jù)庫(kù)中建立臨時(shí)表等方法來(lái)解決這類查詢問(wèn)題。而我覺(jué)得這種方法不可行,其實(shí)只要用.net類庫(kù)中提供的dataview類的強(qiáng)大功能(主要是用它的rowfilter屬性),就能方便地解決這類查詢問(wèn)題。下面就舉一個(gè)具體的例子,來(lái)說(shuō)明如何不用sql語(yǔ)句,用dataview的rowfilter屬性來(lái)查詢。

步驟一:建立一個(gè)c#的asp.net項(xiàng)目。先編寫一個(gè)生成datatable的函數(shù)makedatatable(),代碼如下:

private datatable maketable()

{

//生成datatable

system.data.datatable mydatatable = new datatable("本地?cái)?shù)據(jù)表");

datacolumn mydatacolumn;

datarow mydatarow;

//生成數(shù)據(jù)列 id,商品名稱,商品價(jià)格

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 = "商品價(jià)格";

mydatatable.columns.add(mydatacolumn);



//為數(shù)據(jù)表添加數(shù)據(jù)行

mydatarow = mydatatable.newrow();

mydatarow["id"] = 1;

mydatarow["商品名稱"] = "足球";

mydatarow["商品價(jià)格"] =57.5;

mydatatable.rows.add(mydatarow);



mydatarow = mydatatable.newrow();

mydatarow["id"] = 2;

mydatarow["商品名稱"] = "籃球";

mydatarow["商品價(jià)格"] =64.5;

mydatatable.rows.add(mydatarow);



mydatarow = mydatatable.newrow();

mydatarow["id"] = 3;

mydatarow["商品名稱"] = "網(wǎng)球";

mydatarow["商品價(jià)格"] =6.5;

mydatatable.rows.add(mydatarow);



mydatarow = mydatatable.newrow();

mydatarow["id"] = 4;

mydatarow["商品名稱"] = "網(wǎng)球拍";

mydatarow["商品價(jià)格"] =388.5;

mydatatable.rows.add(mydatarow);



//返回?cái)?shù)據(jù)表

return mydatatable;

}






步驟二:在aspx前臺(tái)頁(yè)面中添加一個(gè)datagrid1,在后臺(tái)代碼的page_load中編寫如下代碼:

if(!this.ispostback)

{

session["table"]=maketable();

datagrid1.datasource=(datatable)session["table"];

datagrid1.databind();

}




此時(shí)瀏覽頁(yè)面,可以看到datagrid中顯示的表中數(shù)據(jù)。

id
商品名稱
商品價(jià)格

1
足球
57.5

2
籃球
64.5

3
網(wǎng)球
6.5

4
網(wǎng)球拍
388.5


步驟三:在aspx前臺(tái)頁(yè)面添加一個(gè)用來(lái)查詢label1,textbox1和button1。如下圖所示:




步驟四:在查詢按鈕button1單擊事件中添加如下代碼:

datatable dt=(datatable)session["table"];

//為數(shù)據(jù)表建立一個(gè)數(shù)據(jù)視圖

dataview dv=new dataview(dt);

//用rowfilter屬性進(jìn)行模糊查詢

dv.rowfilter="商品名稱 like'%"+textbox1.text.trim()+"%'";

datagrid1.datasource=dv;

datagrid1.databind();


運(yùn)行頁(yè)面后在textbox1中輸入“網(wǎng)”,按查詢按鈕后 ,datagrid顯示的查詢結(jié)果如下:



id
商品名稱
商品價(jià)格

3
網(wǎng)球
6.5

4
網(wǎng)球拍
388.5


步驟五:在aspx前臺(tái)頁(yè)面上添加一個(gè)label2控件,兩個(gè)textbox控件-textbox1和textbox2,以及一個(gè)“查詢”按鈕,button2,如下圖所示,用來(lái)查詢用戶輸入的價(jià)格范圍中在商品。




步驟六:在后臺(tái)代碼中為button2按鈕單擊事件添加如下如下代碼:

datatable dt=(datatable)session["table"];

dataview dv=new dataview(dt);

dv.rowfilter="商品價(jià)格>="+textbox2.text.trim()+" and 商品價(jià)格<="+textbox3.text.trim();

datagrid1.datasource=dv;

datagrid1.databind();




用戶在兩個(gè)文本框中輸入價(jià)格范圍,10,70后,datagrid1中顯示的查詢結(jié)果如下:



id
商品名稱
商品價(jià)格

1
足球
57.5

2
籃球
64.5




可見,用dataview的rowfilter屬性完全能達(dá)到sql語(yǔ)句select語(yǔ)句所實(shí)現(xiàn)的功能

rowfilter中的查詢語(yǔ)句與sql語(yǔ)句中select語(yǔ)句的語(yǔ)法和作用都極為相似,以下是摘自msdn中關(guān)于rowfilter查詢語(yǔ)句的語(yǔ)法說(shuō)明:

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

用戶定義的值可以用在將與列值進(jìn)行比較的表達(dá)式內(nèi)。字符串值應(yīng)放在單引號(hào)內(nèi)。日期值應(yīng)放在磅符號(hào) (#) 內(nèi)。對(duì)于數(shù)值,允許使用小數(shù)和科學(xué)記數(shù)法。例如:



"firstname = 'john'"



"price <= 50.00"



"birthdate < #1/31/82#"



對(duì)于包含枚舉值的列,將值強(qiáng)制轉(zhuǎn)換為整數(shù)數(shù)據(jù)類型。例如:



"enumcolumn = 5"



運(yùn)算符



使用布爾值 and、or 和 not 運(yùn)算符時(shí)允許串聯(lián)。可以使用括號(hào)來(lái)組合子句和強(qiáng)制優(yōu)先級(jí)。and 運(yùn)算符優(yōu)先于其他運(yùn)算符。例如:



(lastname = 'smith' or lastname = 'jones') and firstname = 'john'



在創(chuàng)建比較表達(dá)式時(shí),允許使用下列運(yùn)算符:



<



>



<=



>=



<>



=



in



like



在表達(dá)式中還支持下列算術(shù)運(yùn)算符:



+(加)



-(減)



*(乘)



/(除)



%(模數(shù))



字符串運(yùn)算符



若要連接字符串,請(qǐng)使用 + 字符。字符串比較是否區(qū)分大小寫由 dataset 類的 casesensitive 屬性的值來(lái)確定。但是,可以用 datatable 類的 casesensitive 屬性重寫此值。



通配符



在 like 比較中,* 和 % 兩者可以互換地作為通配符。如果 like 子句中的字符串包含 * 或 %,那么這些字符應(yīng)用中括號(hào)([])對(duì)其進(jìn)行轉(zhuǎn)義。如果子句中有中括號(hào),那么中括號(hào)字符應(yīng)用中括號(hào)對(duì)其進(jìn)行轉(zhuǎn)義(例如 [[] 或 []])。在模式的開頭和結(jié)尾,或者在模式的結(jié)尾,或在模式的開頭允許使用通配符。例如:



"itemname like '*product*'"



"itemname like '*product'"



"itemname like 'product*'"



在字符串的中間不允許使用通配符。例如,不允許 'te*xt'。



父/子關(guān)系引用



通過(guò)在列名稱前面加 parent,就可以在表達(dá)式中引用父表。例如,parent.price 引用父表的名為 price 的列。



通過(guò)在列名稱前面加一個(gè) child,就可以在表達(dá)式中引用子表中的列。但是,因?yàn)樽雨P(guān)系可以返回多行,所以必須在聚合函數(shù)中包括對(duì)子列的引用。例如,sum(child.price) 將返回子表中名為 price 的列的總和。



如果某個(gè)表有多個(gè)子表,則語(yǔ)法是:child(relationname)。例如,如果某個(gè)表有兩個(gè)子表,它們的名稱分別為 customers 和 orders,則 datarelation 對(duì)象被命名為 customers2orders,引用將為:



avg(child(customers2orders).quantity)



聚合



支持下列聚合類型:



sum(求和)



avg(平均)



min(最小值)



max(最大值)



count(計(jì)數(shù))



stdev(統(tǒng)計(jì)標(biāo)準(zhǔn)偏差)



var(統(tǒng)計(jì)方差)。



聚合通常沿著關(guān)系執(zhí)行。通過(guò)使用上面列出的函數(shù)之一和上面“父/子關(guān)系引用”中詳述的子表列,來(lái)創(chuàng)建聚合表達(dá)式。例如:



avg(child.price)



avg(child(orders2details).price)



聚合也可以在單個(gè)表上執(zhí)行。例如,若要為名為“price”的列中的數(shù)字創(chuàng)建匯總,就用:



sum(price)



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 大理市| 吴堡县| 芜湖市| 河南省| 陇西县| 湖南省| 兰州市| 察哈| 泾川县| 锦屏县| 崇文区| 宁武县| 陈巴尔虎旗| 富川| 梨树县| 陈巴尔虎旗| 马龙县| 鄢陵县| 遵化市| 民乐县| 高要市| 台南市| 余庆县| 安庆市| 罗定市| 固安县| 梧州市| 清河县| 昆山市| 高安市| 安化县| 桃源县| 宜黄县| 温宿县| 伊通| 原平市| 舒城县| 乳源| 天祝| 湾仔区| 交口县|