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,"列名");