數據集的使用方法和技巧

數據集的使用方法和技巧
數據集概述
1.1數據集
l         是一種代表關係數據的內存駐留結構
l         是以XML 形式表示的數據視圖,是一種數據關係視圖。
l         在Visual Studio 和.NET Framework 中,XML 是存儲和傳輸各種數據時所用的格式。因此,數據集與XML 有密切關係。
1.2數據集分類
– 類型化數據集
     非類型化數據集
1.3類型化數據集和非類型化數據集的區別
 
結構體系
功能類型
檢測
類型化數據集
類型化數據集這樣一種數據集,它先從基DataSet 類派生,然後,使用XML 架構文件(.xsd 文件)中的信息生成新類。架構中的信息(表、列等)被作爲一組第一類對象和屬性生成並編譯爲此新數據集類。
可以直接通過名稱
引用表和列
在VS.NET中可以智能感知元素的類型
非類型化數據
非類型化數據集沒有相應的內置架構。與類型化數據集一樣,非類型化數據集也包含表、列等,但它們只作爲集合公開。
需要通過Tables集
合引用列
不能感知
 
1.4 數據集的屬性
重點:
– Tables
     Relations
 
創建數據集和數據表
2.1創建數據集:
– 設計時創建非類型化數據集
工具箱“數據”
     運行時創建非類型化數據集
 
2.2 創建數據表
• 數據表屬性
–最重要的集合:
• Columns
• Rows
• Constraints
• 給數據集添加數據表
[參考代碼]
//創建數據集
DataSet ds = new DataSet("myDS");
DataTable dsMaster = new DataTable("master");
DataTable dsChild = new DataTable("child");
ds.Tables.Add(dsMaster);
ds.Tables.Add(dsChild);
 
2.3 爲數據表添加列
• Columns集合屬性
• 爲數據表添加列
 
2.4 爲數據表添加行
• Rows屬性
• Rows.Add方法
– Add(DataRow):向數據表中添加指定的數據行
• 爲數據表添加行
[參考代碼]
//添加列
ds.Tables["master"].Columns.Add("masterID", typeof(Int32));
//添加行
DataRow dr = ds.Tables["master"].NewRow();
dr["masterID"] = "";
ds.Tables["master"].Rows.Add(dr);
//修改表頭
ds.Tables["master"].Columns["masterID"].Caption = "主ID";
 
2.5 爲數據表添加約束
• ForeignKeyConstraints屬性:保證兩個數據表之間對應行改變時的關係
• UniqueConstraints屬性:保證某列數據在每行都不相同
• 在運行時爲數據表添加約束
–添加外鍵約束:修改一個表的值看是否變化
–添加唯一鍵約束
 
2.6 爲數據集添加關係
• Relations:定義數據表之間的關係,該集合中可以包含0個或者多個數據關係對象,每個對象表示
兩個表之間的關係
• 只有數據集的EnforeConstraints屬性設置爲true時,DataRelation中建立的約束纔會被強制執行
• 爲數據表添加數據關係(非類型數據集)
[參考代碼]
//添加唯一鍵
System.Data.UniqueConstraint uc = new UniqueConstraint("唯一鍵名稱",ds.Tables["master"].Columns["masterID"]);
//添加外鍵
System.Data.ForeignKeyConstraint fc = new ForeignKeyConstraint("外鍵名稱", "主表列", "從表列");
//添加關係
ds.Relations.Add("關係名","父表列","子表列");
//注意關係和外鍵的區別
if (ds.Relations.Count <= 0)
    return ;
System.Data.DataRow dr = ds.Tables["master"].Rows[0];
System.Data.DataRow[] drArray = dr.GetChildRows(ds.Relations[0]);
//這裏的區別在於 外鍵:如果主表列更新,則從表列都對應更新
//關係:能夠從父表對應的一列,獲取子表對應的行集
 
2.7 顯示行狀態
• 數據行的RowState屬性反映了自數據表創建以來或者上次更新後在數據表上採取的操作
• DataRowState的取值
• 顯示狀態行
[參考代碼]
//顯示行狀態
DataRowState drs = ds.Tables["master"].Rows[0].RowState;
 
數據操作
3.1數據集方法
– 克隆數據集:只複製結構
DataSet.Clone ();
– 複製數據集:複製結構和數據
DataSet.Copy ();
3.2數據表方法
– Select方法:用於在運行時過濾數據表的行並進行排序。它不對錶的內容作改動。該方法只是返回與指定的規則相匹配的行數組
//返回DataRow[]集合
DataSet.Tables["master"].Select(“條件”,”排序規則”);
 
數據集內的篩選與排序
在填充數據集之後,通常會發現使用表中的不同記錄子集或以不同順序查看數據很有用。可以通過對數據集內的數據進行篩選和排序來實現這一點。若要簡化此過程,可以創建數據視圖,數據視圖提供可合併篩選器和排序條件的對象,可用作數據綁定的源
 
數據集內的篩選與排序
可改用內置的數據集功能來篩選和排序。有兩個選擇:
• 數據表支持Select 方法,您可調用該方法來篩選和排序。該方法並不更改表中記錄的內容和順序,相反,它向您提供一個記錄列表(或數組)表示所指定的條件。
• 可以使用數據視圖(DataView 對象)。數據視圖是一個對象,它作爲數據表之上的層,提供經過篩選和排序後的表內容視圖。(還可以使用數據視圖管理器,它的行爲像數據視圖集合。)數據視圖類似於數據庫中的視圖,因爲它不是數據的副本。相反,它只是查看錶中數據的另一種方式。
 
4.1 數據視圖概述
數據視圖是位於數據表之上的獨立對象
• 數據視圖是對單一數據進行過濾和排序後的視圖
• 可以用作綁定控件的數據源
• 可以爲一個數據表創建多個數據視圖
• 視圖數據行實際引用了數據行的DataRowView對象
 
DataRowView的屬性
 
屬性
描述
DataView
該數據行視圖所屬的數據視圖
IsEdit
表示該數據行視圖是否正在被編輯
IsNew
表示該數據行視圖是否爲新建
Item
該數據行視圖中某列的值
Row
正在被查看的數據行
RowVersion
該數據行視圖的當前版本
4.2 創建數據視圖
• 在設計時創建
–創建類型化數據集
–從工具箱“數據”中選擇“DataView”控件
• 可以使用表的DefaultView 屬性來訪問該默認數據視圖,該數據視圖返回一個
DataView 對象。可在運行時設置默認數據視圖的屬性。
 
4.3 數據視圖的屬性
• 數據視圖屬性
RowFilter
– RowStateFilter
– Sort
• 使用表的Select 方法或數據視圖的RowFilter 屬性,可以篩選數據表中的記錄以便僅使想操作的記錄可用。這在要操作數據集表中記錄的不同子集時很有用。若要指定篩選器條件,可以使用與創建列表達式所用語法相同的表達式語法。
[參考代碼]
//RowFilter判斷
string tempid = this.lbdid.Text.ToString();
bookView.RowFilter = "id='" + tempid + "'";
if (bookView.Count==1)
{
     Response.Write("<script langusge='javascript'>alert('。。。');</script>");
     return;
}
//RowStateFilter判斷
DataView dwMain = (DataView)Session["cart"];
dwMain.RowFilter = this.tbCon.Text;
switch (ddlState.SelectItem.Value)
{
    case "CurrentRows":
        dwMain.RowFilter = DataViewRowState.CurrentRows;
        break;
    case "OriginalRows":
        dwMain.RowFilter = DataViewRowState.OriginalRows;
        break;
    case "Added":
        dwMain.RowFilter = DataViewRowState.Added;
        break;
    case "Unchanged":
        dwMain.RowFilter = DataViewRowState.Unchanged;
        break;
    case "ModifiedCurrent":
        dwMain.RowFilter = DataViewRowState.ModifiedCurrent;
        break;
    default:
        break;
}
 
數據列表達式
• 是一個字符串,可以使用任何一個普通字符串處理函數來生成
• 算術運算符:+,-,*,/,%
• 比較運算符:AND,OR,<,>,<=,>=,<>
– IN:確定指定值是否包含在一個集合中
• myExpression= “myColumnIN ( ‘a’,’b’,’c’)”
– Like:用通配符進行模糊匹配
• 函數
4.4 數據視圖的方法
 
方法
描述
AddNew
向數據視圖中添加一個新的數據行視圖
Delete
從數據視圖中刪除一個數據行視圖
Find
根據指定的主鍵查找包含該主鍵的數據行視圖
Find方法
• 按指定的排序關鍵字值在DataView 中查找行。
[參考代碼]
//向數據視圖添加行
DataRowView drv;
drv = dwMain.AddNew();
drv[".."] = "..";
//省略,不需要再Add
//刪除
dwMain.Delete(dwMain.Count - 1);
//更新
dwMain[dwMain.Count - 1]["列名"] = "";
//查找,返回檢索行數
dwMain.Find("關鍵字");
 
數據集實用技巧
• EXCEL和DataSet
[參考代碼]
//注意添加名字空間using System.Data.OleDb;
#region從Excel導入DataSet
string strConn = "Provider=Microsoft.Jet.OLEDB4.0"+
                 "Data Source="+strFillName+";"+
                 "Extended Properties =Excel8.0";
OleDbDataAdapter ExcelDa = new OleDbDataAdapter("select * from [sheet1$]", strnConn);
DataSet ExcelDs = new DataSet();
try
{
    ExcelDa.Fill(ExcelDs, "excelInfo");
}
catch(Exception err)
{
    //進行錯誤處理
}
#endregion
 
 
#region從DataSet導入Excel
//首先要添加COM組件:添加引用-Com組件-Microsoft Excel 11.0-選擇'確認
Excel.Application excel = new Excel.Application();
int rowIndex = 1;
int colIndex = 0;
excel.Application.Workbooks.Add(true);
System.Data.DataTable tb = ds.Tables[0];
foreach(DataColumn col in tb.Columns)
{
    colIndex++;
    //獲取列名稱
    excel.Cells[1, colIndex] = col.ColumnName;
}
foreach (DataRow row in tb.Rows)
{
    //添加數據
    rowIndex++;
    colIndex = 0;
    foreach (DataColumn col in tb.Columns)
    {
        colIndex++;
        excel.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString();
    }
}
excel.Visible = false;
excel.ActiveWorkbook.SaveAs(....);
excel.Quit();
excel=null;
GC.Collect();//垃圾回收
#endregion
• XML和DataSet
[參考代碼]
DataSet ds = new DataSet();
//Schelma儘量要單獨載入,否則解析效率很低
ds.ReadXml("...");
ds.WriteXml("..");
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章