日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ADO.NET的记忆碎片(七)

發布時間:2023/12/9 asp.net 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的ADO.NET的记忆碎片(七)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。