小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

DataSet對象的屬性 - 給點陽光就燦爛 - 博客園

 昵稱52479 2007-12-18
6.6.1 DataSet對象的屬性

CaseSensitive

DataSetName

DesignMode

EnforceConstraints

ExtendedProperties

HasErrors

Locale

Namespace

Prefix

Relations

Tables

6.6.2 DataSet對象的方法

AcceptChanges

RowState的屬性值為AddedModified的所有行的RowState屬性將會被設置為Unchanged。這樣做也會將DataRow的當前值重置為原始值。任何標記為DeletedDataRow對象在調用AcceptChanges時將會被刪除。

DataAdapter對象成功地提交存儲在DataRow對象中的掛起更改時,它也隱式地對該DataRow調用了AcceptChanges。

BeginInit

Clear

Clone

Copy

EndInit

GetChanges

GetXml

GetXmlSchema

HasChanges

InferXmlSchema

Merge

ReadXml

ReadXmlSchema

RejectChanges

Reset

WriteXml

WriteXmlSchema

6.6.3 DataSet對象的事件

MergeFailed

6.6.4 DataTable對象的屬性

CaseSensitive

ChildRelations

ParentRelations

ChildRelations屬性和ParentRelations屬性允許您查看當前DataTable中包含子關系或父關系的DataRelation對象。

假設您正在處理分級的Customer數據,Order數據和OrderDetails數據,并引用了一個包含Order信息的DataTable,那么ParentRelations集合將會包含關聯(lián)Order DataTableCustomer DataTableDataRelation對象;ChildRelations將會包含涉及Order DataTableOrderDetails DataTableDataRelation對象。

Columns

Constraints

DataSet

DefaultView

如果您為DataTable綁定一個控件,則該控件實際綁定到DataTableDefaultView屬性上。例如,可以用下面的代碼來應用過濾器,使得在綁定到DataTableDataGrid中只顯示來自西班牙的客戶,DataTable仍包含所有的客戶。

tblCustomers.DefaultView.RowFilter = "Country = 'Spain'";

gridCustomers.DataSource = tblCustomers;

DesignMode

ExtendedProperties

HasErrors

Locale

MinimumCapacity

如果大概知道DataTable包含的行數,那么在將結果填充到DataTable前設置DataTable對象的MinimumCapacity屬性可以起到增強代碼性能的結果。

MinimumCapacity默認為50

Namespace

Prefix

PrimaryKey

2個作用,一個是作為唯一約束,另一個是使用DataTableRows集合的Find方法還可以根據DataRow中的主鍵在DataTable中定位在DataRow。

Rows

TableName

6.6.5 DataTable對象的方法

AcceptChanges

BeginInit

BeginLoadData

如果要將一組DataRow對象添加到DataTable對象中,那么使用BeginLoadDataEndLoadData方法也許能夠改進性能。

調用BeginLoadData會關閉DataTable的約束,調用EndLoadData將恢復約束。如果DataTable包含破壞約束的行,那么在調用EndLoadData時會出現(xiàn)ConstraintException。要確定引發(fā)異常的行可查看GetErrors方法返回的行。

Clear

Clone

Compute

可以使用該方法在特定查詢規(guī)則基礎上執(zhí)行對DataTable中某一列的聚合查詢。

下面代碼介紹了使用Compute方法來計算包含chai的定單數。代碼還計算訂購chai的單位總數:

string strSQL, strConn;

strConn = "Provider=SQLOLEDB;Data Source=(local)\\NetSDK;" +

          "Initial Catalog=Northwind;Trusted_Connection=Yes;";

strSQL = "SELECT OrderID, ProductID, Quantity FROM [Order Details]";

OleDbDataAdapter da = new OleDbDataAdapter(strSQL, strConn);

DataTable tbl = new DataTable("Order Details");

da.Fill(tbl);

int intNumChaiOrders;

Int64 intNumChaiUnits;

intNumChaiOrders = (int) tbl.Compute("COUNT(OrderID)", 

                                     "ProductID = 1");

intNumChaiUnits = (Int64) tbl.Compute("SUM(Quantity)", 

                                      "ProductID = 1");

Console.WriteLine("# of orders that include chai: " + 

                  intNumChaiOrders);

Console.WriteLine("Total number of units ordered: " + 

                  intNumChaiUnits);

不能使用Compute方法來計算包括多列的聚合——如SUM(Quantity*UnitPrice),但可使用基于表達式的列來執(zhí)行兩列的計算,接著在Count方法中使用基于該表達式的列——SUM(ItemTotal)。

Compute方法通過使用通常的Object數據類型來返回結果,因此當使用Compute方法執(zhí)行計算時,用來存儲結果的數據類型可能會令您吃驚。例如Quantity列的數據類型屬性是16位的整數,但調用Compute方法返回的是64位整數。

如果不能確定調用Compute方法時存儲結果的數據類型,可以使用下面的代碼:

object objRetVal = tbl.Compute("SUM(Quantity)", 

                               "ProductID = 1");

Console.WriteLine(objRetVal.GetType().ToString());

Copy

EndInit

EndLoadData

GetChanges

GetErrors

ImportRow

LoadDataRow

NewRow

ImportRow接受DataRow對象,并將數據添加到DataTable中。

LoadDataRow方法會接受任一數組作為它的第一個參數。數組中的每個項對應DataTable的列集合的一項。LoadDataRow的第二個參數是控制新DataRow對象的RowStateBoolean值。如果希望是Added,應該置false,如果希望是Unmodified,設置為true即可。

NewRow方法會為DataTable返回一個新DataRow對象,此時新DataRow將不會存儲在DataTableRows集合中,當已經將所需的列加入DataRow后,需要將這項添加到Rows集合中。

應該用哪種方法,建議如下:

如果不希望從不同DataTable中導入行,使用ImportRow方法。

如果希望根據文件內容一次添加若干行,使用LoadDataRow。

其他情況下,使用NewRow

RejectChanges

Reset

Select

可以使用select方法根據各種搜索條件來定位DataTable的一行或多行,Select方法會返回符合條件的一組DataRow對象。

6.6.6 DataTable對象的事件

ColumnChanged

ColumnChanging

RowChanged

RowChanging

RowDeleted

RowDeleting

 

6.6.7 DataColumn對象的屬性

AllowDBNull

AutoIncrement

AutoIncrementSeed

AutoIncrementStep

Caption

如果在綁定的數據網格中顯示DataTable的內容,可使用Caption屬性來控制列的標題。在默認情況下,Caption屬性將返回與ColumnName屬性值相同的值。

ColumnMapping

DataSet數據以xml返回時,可以使用ColumnMapping屬性來控制ADO.NET如何寫入列的內容。

ColumnMapping屬性接受System.Data命名空間中的MappingType枚舉的值。ColumnMapping屬性默認值為Element,即表示DataRow中每一列的值都會顯示在一個元素標簽中。還可以將ColumnMapping屬性設置為AttributeHidderSimpleContent。

下面的例子表明了使用元素和使用DataSet中數據屬性的區(qū)別。

Using Column.ColumnMapping = MappingType.Element

<MyDataSet>

  <Customers>

    <CustomerID>ABCDE</CustomerID>

    <CompanyName>New Customer</CompanyName>

    <ContactName>New Contact</ContactName>

    <Phone>425 555-1212</Phone>

  </Customers>

</MyDataSet>

Using Column.ColumnMapping = MappingType.Attribute

<MyDataSet>

  <Customers CustomerID="ABCDE" CompanyName="New Customer"

             ContactName="New Contact" Phone="425 555-1212" />

</MyDataSet>

 

ColumnName

DataType

默認設置為存儲字符串。DataType屬性接受Type屬性的值。下面代碼介紹了如何直接設置DataColumn對象的DataType屬性和調用DataColumnCollection對象的Add方法。

DataColumn col = new DataColumn("NewColumn");

col.DataType = typeof(Decimal);

 

DataTable tbl = new DataTable("Products");

tbl.Columns.Add("ProductID", typeof(int));

tbl.Columns.Add("ProductName", typeof(string));

tbl.Columns.Add("UnitPrice", typeof(Decimal));

 

DefaultValue

Expression

可以將表達式存儲在該屬性中,并且每次請求列的內容時都會計算該表達式。只要不將該屬性設置為默認空字符串,就會自動將DataColumnReadOnly屬性設置為true

下面代碼介紹了如何設置DataColumnExpression屬性來返回DataTable中兩列的乘積。

DataTable tbl = new DataTable("Order Details");

tbl.Columns.Add("OrderID", typeof(int));

tbl.Columns.Add("ProductID", typeof(int));

tbl.Columns.Add("Quantity", typeof(int));

tbl.Columns.Add("UnitPrice", typeof(Decimal));

DataColumn col = new DataColumn("ItemTotal", typeof(Decimal));

col.Expression = "Quantity * UnitPrice"

tbl.Columns.Add(col);

DataRow row = tbl.NewRow();

row["OrderID"] = 1;

row["ProductID"] = 1;

row["Quantity"] = 6;

row["UnitPrice"] = 18;

tbl.Rows.Add(row);

Console.WriteLine(row["ItemTotal"]);

ExtendedProperties

MaxLength

默認為-1。

Namespace

Ordinal

返回DataColumnDataTable對象的列集合中的位置,該屬性只讀,并且如果DataColumn不在DataTable對象的Column集合中,返回-1。

Prefix

ReadOnly

如果設置了true,但只要是在將列內容添加到DataTable對象的rows集合前,仍然可以修改該列的內容。

Table

Unique

將該屬性設置為true將隱式地為列所在的DataTable創(chuàng)建一個UniqueConstraint對象。類似地,給一列添加UniqueConstraint也會將該列的Unique屬性設置為true。

如果創(chuàng)建一組列的唯一約束或主鍵,則每個DataColumn的屬性都不會被設置為true,因為列中的值不一定是唯一的。

 

6.6.8 DataRow對象的屬性

HasErrors

Item

ItemArray

RowError

RowState

Table

 

6.6.9 DataRow對象的方法

AcceptChanges

BeginEdit

CancelEdit

ClearErrors

Delete

實際上并不真正刪除。如果希望徹底刪除,可以先調用delete方法,然后調用AcceptChanges

EndEdit

GetChildRows

獲得當前DataRow的子行。要使用該方法,必須提供一個DataRelation或是該DataRelation的名稱。還可以提供DataRowVersion枚舉中的值來控制獲取數據的版本。

該方法返回一組DataRow對象中的子數據。

GetColumnError

SetColumnError

GetColumnsInError

 

GetParentRow

GetParentRows

SetParentRow

GetParentRowSetParentRow提供了一種簡便的方法來分別查看和設置DataRelation對象中當前行的父行。

GetChildRows方法一樣,GetParentRow接受DataRelation名稱或對象本身。也接受DataRowVersion枚舉中的值來控制獲取數據的版本。GetParentRow方法返回一個DataRow對象。

如果當前DataRow有多個父行,可以使用GetParentRows方法訪問那些行。

調用SetParentRow可以修改關系中的父行,使用該方法只需要傳遞該行的新的父行。如果當前行的DataTableDataSet中多個關系的字表,則必須使用允許將DataRelation對象作為第二個參數傳遞的重載方法,這樣SetParentRow方法才能知道希望引用的是哪個關系。

HasVersion

是否具有某一版本的值。(該版本是DataRowVersion枚舉中的值)

IsNull

假設您正在處理包含客戶信息的DataRow,并希望將獲取的ContactName列內容賦給一個字符串變量,如果使用下面的代碼,且ContactName列包含Null值,則有可能出現(xiàn)問題。(注意:強類型DataSet中確實存在的

DataRow row;

。。。。

string strContactName;

strContactName = (string) row["ContactName"];

要避免上面的問題,可以有2種方法:創(chuàng)建的數據庫和數據集的列不支持null值,或在列的內容之前查看列中是否有null值。

IsNull正是為第二種方法準備的。

RejectChanges

 

6.6.10 UniqueConstraint對象的屬性

Columns

ConstraintName

ExtendedProperties

IsPrimaryKey

Table

6.6.11 ForeignkeyConstraint對象的屬性

AcceptRejectRule

DeleteRule

UpdateRule

3個屬性控制父行的修改怎樣影響子行。

AcceptRejectRule接受AcceptRejectRule枚舉中的值。該屬性默認值為None,即表示如果對行調用AcceptChanges方法或RejectChanges方法,子行不會受到影響。如果設置為Cascade,該操作會根據ForeignkeyConstraint對象中定義的規(guī)則級連其子行。

DeleteRuleUpdateRule屬性很相似,都接受Rule枚舉中的值,兩個屬性的默認值都是Cascade,表示父行的更改會自動級連到字行。

如果不希望級連,也可以將DeleteRuleUpdateRule屬性值設置為None。還可以將它們設置為SetDefaultSetNull。設置SetNull的話,父行被刪除或其相關聯(lián)的列的內容被改變時,子行中相關聯(lián)的列的內容則為nullSetDefaultSetNull差不多,只不過子行中相關聯(lián)的列的內容被設置為其默認值。

Columns

ConstraintName

ExtendedProperties

RelatedColumns

RelatedTable

Table

6:44 PM | 評論 (0)

回顧Chap.6 處理DataSet對象(2)

6.5 修改DataTable內容

6.5.1 添加新DataRow

DataTable對象有一個返回新DataRow對象的方法,該對象包含了表中每一列的信息。

DataRow row=ds.Tables[“Customers”].NewRow();

row[“CustomerID”]=”ALFKI”;

創(chuàng)建新的DataRow后,就可以使用它的item屬性來填充不同的列,還可以使用item屬性檢查行中列的內容。

DataTableNewRow方法創(chuàng)建一個新行,但并不會將該行添加到DataTable中。通常由于剛創(chuàng)建的行是空行,所以在新行剛創(chuàng)建時您并不希望添加新行。如果列沒有默認值,該列就被設置為Null。

一旦給新行所有需要的列賦值后,就可以使用DataRowCollectionAdd方法來將新行添加到DataTable中。如下:

ds.Tables[“Customers”].Rows.Add(row);

 

DataTable對象還提供了另一種方法來將新行添加到表中:LoadDataRow方法。使用該方法,需要給第一個參數提供一組數值,數組中的數值項與表中的列相對應;AcceptChangesLoadDataRow方法的第二個參數,它允許控制新行DataRowRowState屬性值。下面代碼中該值為false,則新行的RowState屬性值為Added

Object[] aValues={“ALFKI”,”alfreds Futterkiste”,”Maria Anders”,”030-0074321”};

ds.Tables["Customers"].LoadDataRow(aValues, false);

如果第二個參數的值為true,則新DaraRowRowState值將為Unmodified,即表示該行不包含DataAdapter要提交給數據庫的掛起更改。

6.5.2 修改當前行

3種方法可以修改當前行。

1)  使用DataRow對象的item屬性對列賦值。

DataRow rowCustomer;

rowCustomer = ds.Tables["Customers"].Rows.Find("ANTON");

if (rowCustomer == null)

    //Customer not found!

else {

    rowCustomer["CompanyName"] = "NewCompanyName";

    rowCustomer["ContactName"] = "NewContactName";

}

2)  與第一種類似,只是添加了BeginEdit EndEdit 方法

DataRow rowCustomer;

rowCustomer = ds.Tables["Customers"].Rows.Find("ANTON");

if (rowCustomer == null)

    //Customer not found!

else {

    rowCustomer.BeginEdit();

    rowCustomer["CompanyName"] = "NewCompanyName";

    rowCustomer["ContactName"] = "NewContactName";

    rowCustomer.EndEdit();

}

使用BeginEdit EndEdit 方法可以緩存對行的更改。此外,這種方式,在EndEdit前會阻止更新事件(如RowChanging, RowChanged, ColumnChanging, ColumnChanged)的發(fā)生。

3)  使用ItemArray屬性。

Item屬性一樣,使用ItemArray屬性可以檢索或修改行的內容,不同之處就在于Item屬性一次只能處理一行,而ItemArray屬性可以返回并接受對應列的一組項目。

object[] aCustomer={"ALFKI","NewCompanyName", "NewContactName", "NewPhoneNo"};

DataRow rowCustomer;

rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");

rowCustomer.ItemArray = aCustomer;

如果希望使用ItemArray屬性,但是又不希望修改行中每一列的值,可以使用null關鍵字。

object[] aCustomer = {null, "NewCompanyName", 

                      "NewContactName", "NewPhoneNo"};

DataRow rowCustomer;

rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");

rowCustomer.ItemArray = aCustomer;

 

6.5.3 處理DataRow的空值

DataRow對象有IsNull方法,可以查看列是否包含空值。同數據行對象的Item方法一樣,IsNull方法接受列的名字、列在表中的索引或DataColumn對象。

DataRow rowCustomer;

rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");

if (rowCustomer.IsNull("Phone"))

    Console.WriteLine("It's Null");

else 

Console.WriteLine("It's not Null");

 

希望給列賦空值時,不必使用所選編程語言中的關鍵字Null,可以使用DBNull類的value屬性。

DataRow rowCustomer;

rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");

rowCustomer["Phone"] = DBNull.Value;

 

6.5.4 刪除DataRow

簡單地調用DataRowDelete方法就可以了。刪除行并不是把它從DataTable中刪掉,而是將行標志為掛起刪除,以反映到數據庫中。

6.5.6 清除DataRow

如果一定要從DataTable中清除行而不是將它標志為掛起刪除,可以使用DataRowCollection類的RemoveRemoveAt方法。如果有對要刪除的DataRow的引用,可以用前者;如果有索引編號,用后者。

此外,DataSet類和DataTable類分別包含了Clear方法,可以使用該方法從DataSetDataTable中清除所有的DataRow對象而保留其結構。

6.5.7 使用DataRow.RowState屬性

ADO.NET必須知道對DataRow所做修改的類型,這樣以后才能成功地將更改提交給數據庫。ADO.NET將此信息存儲在DataRow中名為RowState的屬性中,該屬性用DataRowState枚舉值通過查看屬性可以知道行是否改動和修改類型(插入、刪除或修改)。

DataRowState枚舉值包括:

Unchanged     2     不包含任何掛起更改

Detached        1     該行不是DataTable的成員

Added            4     該行已被添加到DataTable中,卻不在數據庫中

Modified         16    該行包含掛起更改

Deleted           8     該行是一個掛起刪除

 

6.5.8 檢查DataRow中的掛起更改

依靠RowState屬性可以瀏覽DataTable的內容并找到修改的行。

可以使用DataTableItem屬性來查看行中列的內容,Item屬性可以接受DataRowVersion枚舉中的第二個可選參數,DataRowVersion枚舉包括:

Current   512         存儲在列中的當前值

Original   256         存儲在列中的原始值

Proposed 1024       列的建議值,只有當使用BeginEdit編輯行時有效

Default    1536       默認操作

 

注意:

Original值是從數據庫中取得的值,不會改變。

刪除行后無法訪問Current,但可以訪問Original

枚舉中Default表示DataRow對象的Item屬性中參數的默認值

 

如果不是正處于編輯行的過程中,那么調用Item并省略可選參數等價于將DataRowVersion.Current常數作為可選參數。如果是在編輯行的過程中,將得到列的Proposed值。

6:43 PM | 評論 (0)

回顧Chap.6 處理DataSet對象(1)

6. 處理DataSet對象

6.1 DataSet的特性

DataSet對象其核心為數據的集合

特性:

1)        處理脫機數據

2)        瀏覽、排序、搜索和過濾

3)        處理分級數據

4)        緩存更改

5)        Xml集成

6)        統(tǒng)一的功能

6.2 使用DataSet對象

1)        DataColumn對象
屬性:Name,Ordinal,DataType

2)        DataRow對象
可以提供列的名稱、列在DataTable中的序數位置、DataColumn對象三種方式訪問DataRow對象中特定列的值,效率依次提高。

3)        Constraint對象

 

6.3 校驗DataSet中的數據

6.3.1 校驗DataColumn的屬性

設置DataColumn對應屬性:

ü         ReadOnly

ü         AllowDBNull

ü         MaxLength

ü         Unique

6.3.2 DataTable對象的Constraints集合

ADO.NET中有兩個類(UniqueConstraintForeignkeyConstraint)可以用于DataTable中定義約束。

DataTable提供一個Constraints屬性可以用于添加、修改或查看DataTable上的約束。

ü         UniqueConstraints
   
如果設置了DataColumnUnique屬性為true,也就在包含該列的DataTable里定義了一個約束,同時還將UniqueConstraints添加到DataTable對象的Constraints屬性中。
   
設置unique屬性的方式比創(chuàng)建一個UniqueConstraint容易,但在確定多列合并后的值是否唯一的時候,需要創(chuàng)建UniqueConstraint。

ü         Primarykey
   
UniqueConstraint的一種特殊類型,ADO.NETDataRowCollection對象用Find方法來根據主鍵列的值查找DataTable的行。
   
可以使用DataTable對象的PrimaryKey屬性設置和查看主鍵。

ü         ForeignkeyConstraint
   
將外部約束添加到DataTable中。通常不必刻意去創(chuàng)建ForeignkeyConstraint,因為當在DataSet的兩個DataTable對象之間創(chuàng)建一個DataRelation的過程時,也會創(chuàng)建一個ForeignkeyConstraint

注意:DataSet的列和表中定義的約束只能在該DataSet中有效。

6.3.3 DataAdapter.Fill模式來檢索模式信息

驗證數據是需要時間的。許多方案都沒有對DataSet設置驗證屬性,所以除非有明確的要求,DataAdapter對象的Fill方法在創(chuàng)建DataTable時并不對DataColumn對象設置驗證屬性,也不會將約束添加到DataTable對象的約束集合中。

當將列添加到DataTable時,可以用兩種方法來通知DataAdapter在數據庫中檢索該模式信息:一種是通過將DataAdapter對象的MissingSchemaAction屬性設置為AddWithKey來實現(xiàn)的,另一種是調用DataAdapter對象的FillSchema方法。

DataAdapter將試圖為DataTable生成一個主鍵,這是相當糟糕的。如果表含有一個包括兩個列的主鍵而使用的查詢卻不包括這些列,DataAdapter將不再使用DataTable中的這個主鍵。

DataAdapter也將設置新DataColumn對象的AutoIncrement屬性。

6.4 編寫代碼創(chuàng)建DataTable對象

1)        創(chuàng)建DataTable對象
DataTable tbl=new DataTable(“TableName”);

2)        DataTable添加到DataSet對象的Tables集合
DataTable tbl=new DataTable(“TableName”);
ds.Tables.Add(tbl);

ds.Tables.Add(“Customers”);
可以通過查看DataTable對象的DataSet屬性來確定一個DataTable是否存在于DataSet中。
DataTable
對象只能存在于至多一個DataSet對象中。如果希望將DataTable添加到多個DataSet中,就必須使用copyclone方法。前者創(chuàng)建一個與原DataTable結構相同,并且包含相同行的新DataTable;后者創(chuàng)建一個與原DataTable結構相同,但沒有包含任何行的新DataTable

3)        DataTable添加列
DataColumn col=tbl.Columns.Add(”CustomerID”);

4)        指定DataColumn的數據類型
可以使用DataColumnDataType屬性來設置或查看列將包含的數據類型。直到將數據添加到DataTable對象的Rows集合后,DataColumn對象的DataType屬性才不是可讀寫的。
數據庫的數據類型同DataColumn的數據類型不是一一映射的。
DataColumn
DataType屬性默認為字符串,此外,DataColumn還包含一個構造函數,可以指定數據類型和所創(chuàng)建的新列的名稱。同樣,重載DataColumn集合對象的Add方法可以允許為新建DataTable對象和新建DataColumn對象的ColumnNameDataType屬性賦值。
DataColumn col=tbl.Columns.Add(“OrderID”,typeof(int));

5)        添加主鍵
PrimaryKey屬性包含一個DataColumn對象數組,所以不能只簡單地將列的名稱設置為主鍵。
tbl.PrimaryKey=new DataColumn[] {tbl.Columns[“OrderID”], tbl.Columns[“ProductID”]};
注意:為DataTable設置主鍵時,ADO.NET會自動將DataColumn對象或主鍵中引用到的對象的AllowDBNull屬性設置為false。

6)        添加其他約束
DataTable的約束集合有一個重載的Add方法,可以添加新的主鍵、唯一鍵和外鍵約束。
用代碼創(chuàng)建約束有兩種方法:
第一種是直接創(chuàng)建一個新的約束對象并將它添加到DataTable的約束集合中。
tbl.Constraints.Add(New UniqueConstraint(…));
第二鐘方法是使用約束集合對象的Add方法創(chuàng)建新約束并將它添加到集合中。
tbl.Constraints.Add(“ConstraintName”,ColumnInformation);
推薦使用第一種方法,因為容易理解。

tbl.Constraints.Add(new UniqueConstraint(tbl.Columns["CustomerID"]));

//or

tbl.Constraints.Add("UK_Customers", tbl.Columns["CustomerID"],

                    false);

      

//Add a unique key based on the OrderID and ProductID columns.

DataColumn[] cols = new DataColumn[] {tbl.Columns["OrderID"],

                                      tbl.Columns["ProductID"]};

tbl.Constraints.Add(new UniqueConstraint(cols));

//or

tbl.Constraints.Add("UK_Order Details", cols, false);

      

//Add a foreign key constraint based on the OrderID column that

//requires a corresponding OrderID in the Orders table.

tbl.Constraints.Add(new ForeignKeyConstraint

                    (ds.Tables["Orders"].Columns["OrderID"],

                     tbl.Columns["OrderID"]));

//or

tbl.Constraints.Add("FK_Order Details_Orders",

                    ds.Tables["Orders"].Columns["OrderID"],

                    tbl.Columns["OrderID"]);

7)        處理自動增量列
ADO.NET通過DataColumn的3個屬性來支持自動增量列,它們是:AutoIncrement、AutoIncrementSeedAutoIncrementStep
DataColumnAutoIncrement屬性設置為true就可以為DataTable的新行生成自動增量值。
DataSet ds = new DataSet();
DataTable tbl = ds.Tables.Add("Orders");
DataColumn col = tbl.Columns.Add("OrderID", typeof(int));
col.AutoIncrement = true;
col.AutoIncrementSeed = -1;
col.AutoIncrementStep = -1;
col.ReadOnly = true;
依靠ADO.NET的自動增量功能,可在將行添加到DataTable時讓ADO.NET對行進行計算,從而分頁顯示DataTable,而不用根據查詢規(guī)則和行的排序來實現(xiàn)。
AutoIncrement
的可為與不可為:
*可為:使用自動增量特性
*不可為:將生成的自動增量值提交給DB。該值僅僅是占位符。
*不可為:顯示還未提交給數據庫的新行自動增量值
*可為:AutoIncrementSeedAutoIncrementStep設置為-1,這樣能確保生成的占位符不會在數據庫中出現(xiàn)。即使在應用程序中顯示該值,用戶也不會誤認為ADO.NET生成的自動增量值和數據庫生成的自動增量值相同。

8)        添加基于表達式的列
ADO.NET允許創(chuàng)建基于表達式的DataColumn對象??梢詫?/span>DataColumn對象的Expression屬性設置為一個表達式,而用不著在查詢中包含表達式。當查看列的內容時,ADO.NET就會計算表達式并返回結果。
tbl.Columns.Add("Quantity", typeof(int));
tbl.Columns.Add("UnitPrice", typeof(Decimal));
tbl.Columns.Add("ItemTotal", typeof(Decimal),"Quantity * UnitPrice");

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多