数据集的使用方法和技巧
數據集的使用方法和技巧
數據集概述
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("..");
? BLOB和DataSet
?Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=905064
轉載于:https://www.cnblogs.com/ufo0303/archive/2006/08/18/480539.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的数据集的使用方法和技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scott Mitchell 的ASP.
- 下一篇: 网管日志-06.09.08