DataSet,DataTable,DataColumn,DataRow的常用操作


 

DataSet

這個玩意沒什么好講的,當ado.net查詢出有多張表集合的數據返回時,這個時候就會使用到DataSet.

DataTable

//表之間直接賦值 dt2=dt1; 兩者指向同一內存空間
//表克隆 DataTable dt2=dt1.Clone(); 復制架構和約束,但不復制數據
//表復制 DataTable 2=dt1.Copy 復制架構和數據,但不復制約束

DataTable table2 = table.Clone();
table.Merge(table2);  //合並兩表

DataTable dt3=new DataTable("表名");

DataTable dt3=new DataTable();

DataColumn

DataColumn 是用來模擬物理數據庫中的列。DataColumn 的組合組成了 DataTable 中列的架構。生成 DataTable 架構的方法就是向 DataColumnCollection 中添加DataColumn 對象來生成架構。同物理數據庫一樣,列是有類型的,比如 varchar, datatime, int 等, DataColumn 有 DataType 屬性表示這一列所存儲的數據種類。由於 DataTable 所包含的數據通常合並回其原始數據源,因此必須使其數據類型與數據源中的數據類型匹配。

DataTable table = new DataTable();
table.Columns.Add(new DataColumn("columns1",System.Type.GetType("System.String")));  //為DataTable添加列方法一
table.Columns.Add(new DataColumn("columns2",typeof(int)));  //為DataTable添加列方法二

 

DataColumn colu = new DataColumn();
colu.ColumnName = "";
colu.DataType = typeof(int);
table.PrimaryKey = new DataColumn[] {colu};   //將列設為主鍵

colu.AutoIncrement = true;  //將列設為自增
colu.AutoIncrementSeed = 1;  //自增起始數
colu.AutoIncrementStep = 1;  //每次自增數

循環表列示列

public static string[] GetColumnsByDataTable(DataTable dt)
       {
           string[] strColumns = null;


           if (dt.Columns.Count > 0)
           {
               int columnNum = 0;
               columnNum = dt.Columns.Count;
               strColumns = new string[columnNum];
               for (int i = 0; i < dt.Columns.Count; i++)
               {
                   strColumns[i] = dt.Columns[i].ColumnName;
               }
           }

           return strColumns;
       } 

 

DataRow

DataRow 模擬的是數據庫中的一行。使用 HasVersion 和 IsNull 屬性確定特定行值的狀態。

DataRow[] rows = table.Select(); //獲得表的所有行數據

DataRow[] rowsTwo = table.Select("id>2"); //帶條件獲取所有行數據

DataRow[] rows = table.Select(); //獲得表的所有行數據

DataTable dx = new DataTable();
dx.ImportRow(row); //將DataRow 復制到DataTable 中,保留任何屬性設置以及初始值和當前值。

table.Rows.Add(new object { }); //添加行

 

DataView

 

DataView dv = table.DefaultView;
DataView dv2 = new DataView();
DataView dv3 = new DataView(table);

一旦你有了DataView對象,你可以利用它的屬性來建立你希望用戶見到的數據行集。一般,你可以使用下列屬性:

  • RowFilter
  • Sort

前者可以定制視圖中可見數據應匹配的規則。而后者通過表達式來進行排序。當然你可以使用這兩者的任意組合。

設置過濾 RowFilter是一個可讀寫的屬性,用來讀取和設置表過濾的表達式。

public virtual string RowFilter {get; set;}
你可以用列名,邏輯和數字運算符和常量的任意合法組合組成表達式。以下是一些例子:

dv.RowFilter = "Country = 'USA'";
dv.RowFilter = "EmployeeID >5 AND Birthdate < #1/31/82#"
dv.RowFilter = "Description LIKE '*product*'"

讓我們來看一下過濾器的基本規則和運算符。
過濾字符串是表達式的邏輯連接。可以用AND,OR,NOT來連接成一個較短的表達式,也可以使用圓括號來組成子句,指定優先的運算。
通常包含列名的子句同字母、數字、日期或另一個列名進行比較。這里,可以使用關系運算符和算術運算符,如>=, <, >, +, *, % (取模)等等。
如果要選取的行並不能方便地通過算術或邏輯運算符表達,你可以使用IN操作符。以下代碼顯示如何選取一個隨機行:

dv.RowFilter = "employeeID IN (2,4,5)"

你也可以使用通配符*和%,它們同LIKE運算符一起使用時顯得更有用。它們都表示任意數量的字符,可以相互替代使用。
請注意,如果在LIKE子句中已經有了*或%字符,你必須用方括號將其括起,以免歧義。如果很不幸,字符串中方括號本身也存在了,那么它也必須用將本身括起。這樣,匹配語句會如下所示:

dv.RowFilter = "Description LIKE '[[]*[]]product[[]*[]]"

通配符只允許在過濾字符串的開頭或結尾處使用,而不能在字符串中間出現。例如,下列語句會產生運行時錯誤:

dv.RowFilter = "Description LIKE 'prod*ct"

DataView去重 ToTable()

dv.ToTable(true,"列名");

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM