Load メソッドを使用して、データ ソースの行を DataTable に読み込むことができます。 これはオーバーロードされたメソッドで、最も単純な形式で単一の DataReader パラメーターを受け取ります。 この形式では、行を含む DataTable を読み込むだけです。 必要に応じて、 LoadOption パラメーターを指定して、 DataTable にデータを追加する方法を制御できます。
LoadOption パラメーターは、DataTableにデータ行が既に含まれている場合に特に便利です。これは、データ ソースからの受信データをテーブルに既に含まれているデータと組み合わせる方法を記述するためです。 たとえば、PreserveCurrentValues (既定値) では、Added で行がとしてマークされている場合、Original値または各列は、データ ソースの一致する行の内容に設定されます。
Current値は、行が追加されたときに割り当てられた値を保持し、行のRowStateが [変更済み] に設定されます。
LoadOption 列挙値の簡単な説明を次の表に示します。
| LoadOption の値 | 説明 |
|---|---|
| OverwriteRow | 受信行の PrimaryKey 値が DataTable 内の行と同じである場合、各列の Original と Current の値は受信行の値に置き換えられ、 RowState プロパティは [変更なし] に設定されます。DataTableにまだ存在しないデータ ソースの行は、RowState値が [変更なし] で追加されます。このオプションは、データ ソースの内容と一致するように、 DataTable の内容を更新します。 |
| PreserveCurrentValues (既定値) | 受信行の PrimaryKey 値が DataTable 内の行と同じである場合、 Original 値は受信行の内容に設定され、 Current 値は変更されません。RowStateが Added または Modified の場合、変更済みに設定されます。RowStateが削除された場合、削除されたままになります。DataTableにまだ存在しないデータ ソースの行が追加され、RowStateが [変更なし] に設定されます。 |
| UpdateCurrentValues | 受信行の PrimaryKey 値が DataTable 内の行と同じ場合、 Current 値が Original 値にコピーされ、 Current 値が受信行の内容に設定されます。RowStateのDataTableが追加された場合、RowStateは [追加] のままです。
Modifiedまたは削除済みとしてマークされた行の場合、RowStateは変更されます。DataTableにまだ存在しないデータ ソースの行が追加され、RowStateが [追加] に設定されます。 |
次の例では、 Load メソッドを使用して、 Northwind データベース内の従業員の誕生日の一覧を表示します。
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