數據庫編程-中級篇 斷開式

斷開式的關鍵對象是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修改到數據庫中)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章