斷開式的關鍵對象是Dataset,因爲DataSet包含了3個重要的集合,使得DataSet可以看成一個斷開連接的數據庫副本:
DataSet: 1.DataTableCollection 2.DataRelationCollection 3.PropertyCollection
DataSet的主要屬性:
除了Tables、Relations和ExtendedProperties屬性之外,還有以下屬性:
CaseSensitive 表示Datatable對象中的字符串是是否區分大小寫,默認爲false 即不區分大小寫
DataSetname 表示DataSet的一個友好名,通常通過構造參數指定
EnforceConstraints 獲取或設置一個值,該值指示在嘗試執行任何更新操作時是否遵循約束規則。
HasErrors 獲取一個值,指示在此DataSet種任何DataTable對象中數據行是否存在錯誤
RemodtingFormat 定義DataSet在傳輸時內容的序列化方式【二進制序列化或xml序列化(默認值)】
DataSet的主要方法
AcceptChanges() 提交自加載此DataSet或上次調用AcceptChanges以來對其進行的所有更改。
Clear()通過移除所有DataTable表中的所有行來清楚任何DataSet的數據。
Clone() 複製DataSet的結構,而不是DataSet的數據,包括所有DataTable架構、關係和約束
Copy()賦值該DataSet的結構和數據
HasChanges() 獲取一個值,該值指示DataSet是否有更新,包括新增行、已刪除的行或已修改的行。
Merge() 將制定的DataSet合併到當前的DataSet中
ReadXml()基於XML 架構和從流中讀取的數據,定義DataSet對象的結構病用於數據填充它
RejectChanges() 回滾自創建Dataset以來或上次調用AcceptChanges()以來對其進行的所有更改
WriteXml() 把DataSet的內容寫入一個有效的數據流
例如:
//建立DataSet對象並添加一些屬性
DataSet carsInventoryDS = new DataSet("Car Inventory");
carsInventoryDS.ExtendedProperties["TimeStamp"] = DateTime.Now;
carsInventoryDS.ExtendedProperties["DataSetID"] = Guid.NewGuid();
carsInventoryDS.ExtendedProperties["Company"] = "Mikko's Hot Tub Super store";
只有在DataSet中插入DataTable,DataSet纔有意義。
DataTable->DataColumn 的屬性
AllowDBNull 該屬性用來指示對錶中的行,此列值是否允許空值,默認爲true 對應Sql: is null
AutoIncrement、AutoIncrementSeed 和AutoIncrementStep 這些屬性用來配置該類的自增行爲 對應Sql identity(1,1)
Caption 該屬性用來獲取或設置要顯示的列的標題,它允許我們爲數據庫列名定義一個用戶友好的版本。對應sql:as fieldname
ColumnMapping:該屬性決定當使用DataSet.WriteXml()來把DataSet保存到XML文件時,該列將以什麼樣的形式呈現。把數據列寫成XML元素、XML特性或文本的形式。
ColumnName 該屬性用來獲取或設置列集合中的列名(在DataTable內部以什麼樣的名字呈現) ,默認的列名是ColumnN
DataType 該屬性定義了存儲在列中的數據類型(如string,bool,float) sql:int varchar(30)
DefaultValue 該屬性用來獲取或設置在創建新行時列的默認值,對應sql:default
Expression 該屬性用來獲取或設置表達式,用於篩選行,計算列中的值或創建聚合列
Ordinal 該屬性用來以數字形式獲取DataTable中列在Columns結合中的位置 dt.getValue(i)
ReadOnly 該屬性指示如果向表中添加了行,列是否允許更改,默認爲false
Table 該屬性用來獲取DataColumn所屬的DataTable
Unique 該屬性用來獲取或設置一個值,指示列的沒遺憾管是否必須是唯一的 對應sql: unique 約束
DataTable->DataRolw類型的主要成員
HasErrors HasErrors屬性返回一個布爾值,指示改行是否存在錯誤
GetColumnsInError() GetColumnsInError()可以用來獲取包含錯誤的成員,GetColumnError()獲取錯誤說明
GetColumnError() CelarError()用來清除改行的所有錯誤
ItemArray 這個屬性通過一個對象數組來獲取或設置慈航的所有列值
RowState 這個屬性用來得到DataTable中的當前DataRow的狀態,值有RowState枚舉定義(如 行可以被標記爲新增、已修改、未改變或已刪除)
AcceptChanges()和RejectChanges() 這些方法提交或拒絕自上次調用AcceptChanges以來對改行進行的所有更改
BeginEdit() EndEdit() 和CancelEdit() 這些方法開始、結束和取消對某DataRow對象的編輯操作
Delete() 這個方法能標記改行爲待刪除、調用AcceptChanges()後移除改行
IsNull 這個方法獲取一個值,該值指示指定的列是否包含空值
使用DataRow和使用DataColumn有些不同,因爲沒有公共構造函數,所以不能直接創建該類的實例,只能從某個DataTable獲得新的DataRow
如: DataRow dr=DateTable.NewRow(); //該方法能讓你獲得一個該表的下一個“插槽”。
dr["PetName"]="erts";
DataTable.Rows.Add(dr);
DataRowState枚舉的值
Added 該行意添加到DataRowCollection中,AcceptChanges()尚未調用。
Deleted 改行標記爲通過DataRow的Delete()方法被刪除,並且沒有調用AcceptChanges()方法
Detached 改行已被創建,但不屬於任何DataRowCollection.DataRow在一下情況下立即處於此狀態:創建之後,添加到集合中之前或者從集合中移除之後
Modified 改行已經被修改,AcceptChanges()尚未調用
UnChanged 改行自上次調用AcceptChanges()以來尚未更改。
DataRowVersion枚舉值
Current 表示行的當前值,即使在做出改變後
Default DataRowState默認值 對於Added Modified或Deleted值得DataRowState,默認版本就是Current.對於Detached的DataRowState版本就是Proposed
Original 表示首次插入DataRow的值,或AcceptChanges()最後一次被嗲用後的值。
DataTable類型的主要成員
CaseSensitie 表示表中的字符串比較是否區分大小寫 ,默認爲false
ChildRelations 獲取此DataTable的自關係的集合
Constraints 獲取由該表維護的約束的集合
Copy() 將某個DataTable的架構和數據複製到新的實例中
DataSet 獲取詞表所屬的DataSet
DefaultView 獲取可能包括篩選視圖或遊標位置的表的自定義視圖
ParentRelations獲取該DataTable的父關係的集合
PrimaryKey 獲取或設置充當數據表主鍵的列的數組
TableName 獲取或設置表名,同樣能夠通過構造函數參數指定這個屬性。
例如:DataTable inventoryTable=new DataTable("Inventory")
inventoryTable.PrimaryKey=new DataColumn[]{ inventoryTable.Columns[0] };
ds.Tables.Add(inventoryTable);
使用數據適配器
DbDataAdapter類的核心成員
Fill() 執行Sql select 命令,(由selectCommand屬性指定)查詢數據庫並將數據加載到DataTable中
SelectCommand、InsertCommand、UpdateCommand、DeleteCommand():建立用於Fill()和Update()方法的由數據庫執行的SQL命令
Update() 執行update、insert、delete命令(由InsertCommand、UpdateCommand、DeleteCommand屬性指定來持久化DataTable修改到數據庫中)