Load 方法
您可以使用 Load 方法,載入具有資料來源之資料列的 DataTable。 這是一種多載方法,在其最簡單的形式中,便可以接受單一參數 DataReader。 在這種形式下,它只會載入含有資料列的 DataTable。 此外,您也可以選擇指定 LoadOption 參數來控制將資料加入 DataTable 的方式。
在 DataTable 已含有資料列的情況下,特別適合使用 LoadOption 參數,因為它會說明資料來源的內送資料,將使用何種方式來與已在資料表內的資料進行結合。 例如,PreserveCurrentValues (預設值) 會指定在 DataTable 中的資料列標記為 Added 的情況下,每個資料行的 Original 值會設定為資料來源中之對應列的內容。 Current 值會保留資料列加入時所指定的值,而資料列的 RowState 會設定為 Changed。
下列表格簡短說明 LoadOption 列舉值。
LoadOption 值 |
說明 |
---|---|
OverwriteRow |
若內送資料列的 PrimaryKey 值與 DataTable 中既有之資料列的值相同,則每個資料行的 Original 與 Current 值都會由內送資料列的值來取代,並且 RowState 屬性會設定為 Unchanged。 資料來源中原本不在 DataTable 內的資料列都會加入,並將 RowState 值設為 Unchanged。 此選項會實際重新整理 DataTable 的內容,以符合資料來源的內容。 |
PreserveCurrentValues (預設值) |
若內送資料列的 PrimaryKey 值與 DataTable 中既有之資料列的值相同,則 Original 值會設定為內送資料列的內容,而 Current 值將保持不變。 若 RowState 為 Added 或 Modified,則會設定為 Modified。 若 RowState 原本為 Deleted,則會保留為 Deleted。 資料來源中原本不在 DataTable 內的資料列都會加入,並將 RowState 設為 Unchanged。 |
UpdateCurrentValues |
若內送資料列的 PrimaryKey 值與 DataTable 中既有之資料列的值相同,則 Current 值會複製到 Original 值上,然後 Current 值會設定為內送資料列的內容。 若 DataTable 中的 RowState 為 Added,則 RowState 會保持為 Added。 對於標記為 Modified 或 Deleted 的資料列,RowState 皆為 Modified。 資料來源中原本不在 DataTable 內的資料列都會加入,並將 RowState 設為 Added。 |
下列範例將使用 Load 方法,顯示 Northwind 資料庫中的員工生日清單。
[Visual Basic]
Private Sub LoadBirthdays(ByVal connectionString As String)
' Assumes that connectionString is a valid connection string
' to the Northwind database on SQL Server.
Dim queryString As String = _
"SELECT LastName, FirstName, BirthDate " & _
" FROM dbo.Employees " & _
"ORDER BY BirthDate, LastName, FirstName"
' Open and fill a DataSet.
Dim adapter As SqlDataAdapter = New SqlDataAdapter( _
queryString, connectionString)
Dim employees As New DataSet
adapter.Fill(employees, "Employees")
' Create a SqlDataReader for use with the Load Method.
Dim reader As DataTableReader = employees.GetDataReader()
' Create an instance of DataTable and assign the first
' DataTable in the DataSet.Tables collection to it.
Dim dataTableEmp As DataTable = employees.Tables(0)
' Fill the DataTable with data by calling Load and
' passing the SqlDataReader.
dataTableEmp.Load(reader, LoadOption.OverwriteRow)
' Loop through the rows collection and display the values
' in the console window.
Dim employeeRow As DataRow
For Each employeeRow In dataTableEmp.Rows
Console.WriteLine("{0:MM\\dd\\yyyy}" & ControlChars.Tab & _
"{1}, {2}", _
employeeRow("BirthDate"), _
employeeRow("LastName"), _
employeeRow("FirstName"))
Next employeeRow
' Keep the window opened to view the contents.
Console.ReadLine()
End Sub