欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
DataSet對象的屬性 - 給點(diǎn)陽(yáng)光就燦爛 - 博客園
6.6.1 DataSet對象的屬性

CaseSensitive

DataSetName

DesignMode

EnforceConstraints

ExtendedProperties

HasErrors

Locale

Namespace

Prefix

Relations

Tables

6.6.2 DataSet對象的方法

AcceptChanges

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

DataAdapter對象成功地提交存儲在DataRow對象中的掛起更改時(shí),它也隱式地對該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中包含子關(guān)系或父關(guān)系的DataRelation對象。

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

Columns

Constraints

DataSet

DefaultView

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

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

gridCustomers.DataSource = tblCustomers;

DesignMode

ExtendedProperties

HasErrors

Locale

MinimumCapacity

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

MinimumCapacity默認為50

Namespace

Prefix

PrimaryKey

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

Rows

TableName

6.6.5 DataTable對象的方法

AcceptChanges

BeginInit

BeginLoadData

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

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

Clear

Clone

Compute

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

下面代碼介紹了使用Compute方法來(lái)計算包含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方法來(lái)計算包括多列的聚合——如SUM(Quantity*UnitPrice),但可使用基于表達式的列來(lái)執行兩列的計算,接著(zhù)在Count方法中使用基于該表達式的列——SUM(ItemTotal)。

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

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

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方法會(huì )接受任一數組作為它的第一個(gè)參數。數組中的每個(gè)項對應DataTable的列集合的一項。LoadDataRow的第二個(gè)參數是控制新DataRow對象的RowStateBoolean值。如果希望是Added,應該置false,如果希望是Unmodified,設置為true即可。

NewRow方法會(huì )為DataTable返回一個(gè)新DataRow對象,此時(shí)新DataRow將不會(huì )存儲在DataTableRows集合中,當已經(jīng)將所需的列加入DataRow后,需要將這項添加到Rows集合中。

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

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

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

其他情況下,使用NewRow

RejectChanges

Reset

Select

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

6.6.6 DataTable對象的事件

ColumnChanged

ColumnChanging

RowChanged

RowChanging

RowDeleted

RowDeleting

 

6.6.7 DataColumn對象的屬性

AllowDBNull

AutoIncrement

AutoIncrementSeed

AutoIncrementStep

Caption

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

ColumnMapping

DataSet數據以xml返回時(shí),可以使用ColumnMapping屬性來(lái)控制ADO.NET如何寫(xiě)入列的內容。

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

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

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

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

下面代碼介紹了如何設置DataColumnExpression屬性來(lái)返回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 )建一個(gè)UniqueConstraint對象。類(lèi)似地,給一列添加UniqueConstraint也會(huì )將該列的Unique屬性設置為true。

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

 

6.6.8 DataRow對象的屬性

HasErrors

Item

ItemArray

RowError

RowState

Table

 

6.6.9 DataRow對象的方法

AcceptChanges

BeginEdit

CancelEdit

ClearErrors

Delete

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

EndEdit

GetChildRows

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

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

GetColumnError

SetColumnError

GetColumnsInError

 

GetParentRow

GetParentRows

SetParentRow

GetParentRowSetParentRow提供了一種簡(jiǎn)便的方法來(lái)分別查看和設置DataRelation對象中當前行的父行。

GetChildRows方法一樣,GetParentRow接受DataRelation名稱(chēng)或對象本身。也接受DataRowVersion枚舉中的值來(lái)控制獲取數據的版本。GetParentRow方法返回一個(gè)DataRow對象。

如果當前DataRow有多個(gè)父行,可以使用GetParentRows方法訪(fǎng)問(wèn)那些行。

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

HasVersion

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

IsNull

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

DataRow row;

。。。。

string strContactName;

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

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

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

RejectChanges

 

6.6.10 UniqueConstraint對象的屬性

Columns

ConstraintName

ExtendedProperties

IsPrimaryKey

Table

6.6.11 ForeignkeyConstraint對象的屬性

AcceptRejectRule

DeleteRule

UpdateRule

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

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

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

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

Columns

ConstraintName

ExtendedProperties

RelatedColumns

RelatedTable

Table

6:44 PM | 評論 (0)

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

6.5 修改DataTable內容

6.5.1 添加新DataRow

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

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

row[“CustomerID”]=”ALFKI”;

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

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

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

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

 

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

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

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

如果第二個(gè)參數的值為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)  與第一種類(lèi)似,只是添加了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前會(huì )阻止更新事件(如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關(guān)鍵字。

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");

 

希望給列賦空值時(shí),不必使用所選編程語(yǔ)言中的關(guān)鍵字Null,可以使用DBNull類(lèi)的value屬性。

DataRow rowCustomer;

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

rowCustomer["Phone"] = DBNull.Value;

 

6.5.4 刪除DataRow

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

6.5.6 清除DataRow

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

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

6.5.7 使用DataRow.RowState屬性

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

DataRowState枚舉值包括:

Unchanged     2     不包含任何掛起更改

Detached        1     該行不是DataTable的成員

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

Modified         16    該行包含掛起更改

Deleted           8     該行是一個(gè)掛起刪除

 

6.5.8 檢查DataRow中的掛起更改

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

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

Current   512         存儲在列中的當前值

Original   256         存儲在列中的原始值

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

Default    1536       默認操作

 

注意:

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

刪除行后無(wú)法訪(fǎng)問(wèn)Current,但可以訪(fǎng)問(wèn)Original

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

 

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

6:43 PM | 評論 (0)

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

6. 處理DataSet對象

6.1 DataSet的特性

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

特性:

1)        處理脫機數據

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

3)        處理分級數據

4)        緩存更改

5)        Xml集成

6)        統一的功能

6.2 使用DataSet對象

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

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

3)        Constraint對象

 

6.3 校驗DataSet中的數據

6.3.1 校驗DataColumn的屬性

設置DataColumn對應屬性:

ü         ReadOnly

ü         AllowDBNull

ü         MaxLength

ü         Unique

6.3.2 DataTable對象的Constraints集合

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

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

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

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

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

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

6.3.3 DataAdapter.Fill模式來(lái)檢索模式信息

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

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

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

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

6.4 編寫(xiě)代碼創(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”);
可以通過(guò)查看DataTable對象的DataSet屬性來(lái)確定一個(gè)DataTable是否存在于DataSet中。
DataTable
對象只能存在于至多一個(gè)DataSet對象中。如果希望將DataTable添加到多個(gè)DataSet中,就必須使用copyclone方法。前者創(chuàng )建一個(gè)與原DataTable結構相同,并且包含相同行的新DataTable;后者創(chuàng )建一個(gè)與原DataTable結構相同,但沒(méi)有包含任何行的新DataTable。

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

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

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

6)        添加其他約束
DataTable的約束集合有一個(gè)重載的Add方法,可以添加新的主鍵、唯一鍵和外鍵約束。
用代碼創(chuàng )建約束有兩種方法:
第一種是直接創(chuàng )建一個(gè)新的約束對象并將它添加到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)        處理自動(dòng)增量列
ADO.NET通過(guò)DataColumn的3個(gè)屬性來(lái)支持自動(dòng)增量列,它們是:AutoIncrement、AutoIncrementSeedAutoIncrementStep。
DataColumnAutoIncrement屬性設置為true就可以為DataTable的新行生成自動(dòng)增量值。
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的自動(dòng)增量功能,可在將行添加到DataTable時(shí)讓ADO.NET對行進(jìn)行計算,從而分頁(yè)顯示DataTable,而不用根據查詢(xún)規則和行的排序來(lái)實(shí)現。
AutoIncrement
的可為與不可為:
*可為:使用自動(dòng)增量特性
*不可為:將生成的自動(dòng)增量值提交給DB。該值僅僅是占位符。
*不可為:顯示還未提交給數據庫的新行自動(dòng)增量值
*可為:AutoIncrementSeedAutoIncrementStep設置為-1,這樣能確保生成的占位符不會(huì )在數據庫中出現。即使在應用程序中顯示該值,用戶(hù)也不會(huì )誤認為ADO.NET生成的自動(dòng)增量值和數據庫生成的自動(dòng)增量值相同。

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

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
DataSet和DataTable - kittey
ADO.NET對象模型 - 技術(shù)改變世界!學(xué)習改變自己! - 博客園
DataTable,DataView和DataGrid中一些容易混淆的概念
DataTable詳解
DataSet與DataReader的區別解讀
DataSet和DataTable詳解
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久