亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學(xué)習(xí)啦>學(xué)習(xí)英語>專業(yè)英語>計算機英語>

      c中datatable的用法

      時間: 長思709 分享

        c中datatable的用法的用法你知道嗎?下面小編就跟你們詳細(xì)介紹下c中datatable的用法的用法,希望對你們有用。

        c中datatable的用法的用法如下:

        一、排序

        1.獲取DataTable的默認(rèn)視圖

        2.對視圖設(shè)置排序表達式

        3.用排序后的視圖導(dǎo)出的新DataTable替換就DataTable(Asc升序可省略,多列排序用","隔開)

        1)、重生法

        復(fù)制代碼 代碼如下:

        dstaset.Tables.Add(dt)

        dataset.Tables(0).DefaultView.Sort = "id desc"

        2)、直接法

        復(fù)制代碼 代碼如下:

        dv = New DataView(dt)

        dv.Sort = "id desc"

        dt = dv.ToTable();

        3)、間接法

        復(fù)制代碼 代碼如下:

        dv = New DataView(ds.Tables[0])

        dv.Sort = "id desc"

        dt = dv.ToTable();

        二、檢索

        設(shè)置查詢字符串

        使用Select方法獲取到所有滿足條件的數(shù)據(jù)行對象數(shù)組 (多項查詢條件間,用and隔開)

        復(fù)制代碼 代碼如下:

        DataRow[] matches = dt.Select("id<'003' and name='名字11'");

        string strName = matches[0]["name"].ToString();

        三、合并

        假定有2個DataTable:Dt1 , Dt2。表結(jié)構(gòu)一樣

        將Dt2接在Dt1后可采用此方法

        復(fù)制代碼 代碼如下:

        dt1.Merge(dt2);

        四、在DataTable中查詢應(yīng)該注意的問題

        完成一個查詢,返回一個DataTable后,很多時候都想在查詢結(jié)果中繼續(xù)搜索。這時可以使用DataTable.Select方法對結(jié)果進行再查詢

        Select方法有4個重載,我們經(jīng)常用到的就是DataTable.Select(String)

        這個String的參數(shù)是查詢的限定式。相當(dāng)于SQL查詢語言中的WHERE語句(不含WHERE),其語法符合SQL語言語法。

        Select方法的返回的是包含查詢到的數(shù)據(jù)的DataRow,但是這個DataRow只是被查詢的DataTable的一個映射,所以DataRow是隨著DataTable的行變化而變化的。例如,DataTable的行都被刪除了,那么DataRow中的數(shù)據(jù)同樣被刪除了(即便是先Select,再刪除的)

        所以,要想把返回的DataRow放進數(shù)據(jù)顯示控件中,需要將其放入另一個DataTable中,如果直接放入原DataTable或?qū)⒃璂ataTable的行全部清除再放入查詢所得的數(shù)據(jù)都是不行的,程序會顯示錯誤,錯誤提示是“表中已有此行”。

        另外,在一個新表中插入行,不能直接用DataTable.Rows.Add(DataRow)的方式,因為這樣是插入一個新表,也就是DataRow是空的。要用導(dǎo)入行的方式,DataTable.ImportRow(DataRow)。當(dāng)然,前提是這個新表要有與原數(shù)據(jù)表一樣的結(jié)構(gòu)。

        復(fù)制代碼 代碼如下:

        Public Function SDEResearch(ByVal InputDT As DataTable, ByVal SearchStr As String) As DataTable

        '用來存儲再查詢后的數(shù)據(jù)表

        Dim ReSearchDT As DataTable = InputDT.Clone() '保證有與源數(shù)據(jù)表相同的表結(jié)構(gòu)

        '用來存儲查詢后返回的datarow數(shù)組

        Dim ReSearchDR() As DataRow = Nothing

        Try

        ReSearchDR = InputDT.Select("NAME LIKE '%" + SearchStr + "%'") '只是從數(shù)據(jù)表中映射出來datarow(),所以不能刪除原表中的行

        Catch ex As Exception

        Return Nothing

        End Try

        For i As Int16 = 0 To ReSearchDR.Length - 1

        ReSearchDT.ImportRow(ReSearchDR(i))

        Next

        Return ReSearchDT

        End Function

        附:篩選DataTable數(shù)據(jù)的方法

        對DataTable進行過濾篩選的一些方法Select,dataview

        當(dāng)你從數(shù)據(jù)庫里取出一些數(shù)據(jù),然后要對數(shù)據(jù)進行整合,你很容易就會想到:

        復(fù)制代碼 代碼如下:

        DataTable dt = new DataTable();//假設(shè)dt是由"SELECT C1,C2,C3 FROM T1"查詢出來的結(jié)果

        for (int i = 0; i < dt.Rows.Count; i++)

        {

        if (dt.Rows[i]["C1"].ToString() == "abc")//查詢條件

        {

        //進行操作

        }

        }

        但這種做法用一兩次還好說,用多了就累了。那有沒有更好的方法呢?記得LinQ是可以直接對DataTable進行查詢操作的,那在.Net Framework 2.0里,有沒有類似的方法呢?答案是肯定的,就是dt.Select(),上面的操作可以改成這樣:

        復(fù)制代碼 代碼如下:

        DataRow[] drArr = dt.Select("C1='abc'");//查詢

        還可以這樣操作:

        復(fù)制代碼 代碼如下:

        DataRow[] drArr = dt.Select("C1 LIKE 'abc%'");//模糊查詢

        DataRow[] drArr = dt.Select("'abc' LIKE C1 + '%'", "C2 DESC");//另一種模糊查詢的方法

        DataRow[] drArr = dt.Select("C1='abc'", "C2 DESC");//排序

        問題又來了,如果要把DataRow賦值給新的DataTable,怎么賦值呢?你可能會想到:

        復(fù)制代碼 代碼如下:

        DataTable dtNew = dt.Clone();

        for (int i = 0; i < drArr.Length; i++)

        {

        dtNew.Rows.Add(drArr[i]);

        }

        但這樣程序就會出錯,說該DataRow是屬于其他DataTable的,那要怎么做呢?很簡單,這樣就可以解決了:

        復(fù)制代碼 代碼如下:

        DataTable dtNew = dt.Clone();

        for (int i = 0; i < drArr.Length; i++)

        {

        dtNew.ImportRow(drArr[i]);

        }

        這樣就完成了。

        3.5里的DataRow[]有個擴展方法CopyToDataTable()

        復(fù)制代碼 代碼如下:

        /*

        * 補充一下,還可以利用DataView來達到檢索的目的。

        */

        DataTable dataSource = new DataTable();

        DataView dv = dataSource.DefaultView;

        dv.RowFilter = "columnA = 'abc'";

        //1.過濾后直接獲取DataTable

        DataTable newTable1 = dv.ToTable();

        //2.設(shè)置新DataTable的TableName

        DataTable newTable2 = dv.ToTable("NewTableName");

        //3.設(shè)置新表是否過濾重復(fù)項,擁有的列的列名以及出現(xiàn)的順序

        //即可以設(shè)置新表的字段。但是字段名肯定是老表dataSource中擁有的。

        DataTable newTable3 =

        dv.ToTable(true, new string[] { "columnA,columnF,columnC" });

        //4.綜合了2.3兩點。

        DataTable newTable4 =

        dv.ToTable("NewTableName", true, new string[] { "columnA,columnF,columnC" });

      537125