型付されたデータセットの親テーブル参照について教えていただきたいです。
CategoriesテーブルのCategoryIDとProductsテーブルのCategoryID
で親子リレーションを作成しています。
親子両方のテーブルを読み込めば、型付されたデータセットでは、
DataTable_prod(0).CategoriesRow.CategoryName
のように親情報を取得できると考えているのですが、この行で
オブジェクト参照がオブジェクト インスタンスに設定されていません
が出てしまいます。
何が原因かわかる方がいれば、教えていただきたいと思います。
(参考にした本 Web+DB press Vol.23 p.107-111)
よろしくお願いいたします。
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
Dim Adp_cate As New ProductDataSetTableAdapters.CategoriesTableAdapter
'* AdapterのSelectCommand
'SELECT DISTINCT Categories.CategoryID, Categories.CategoryName
'FROM Products INNER JOIN
' Categories ON Products.CategoryID = Categories.CategoryID
Dim DataTable_cate As New ProductDataSet.CategoriesDataTable
Adp_cate.Fill(DataTable_cate)
Dim Adp_prod As New ProductDataSetTableAdapters.ProductsTableAdapter
'* AdpterのSelectCommand
'SELECT ProductID, ProductKana, ProductName, SupplierID, CategoryID, QuantityPerUnit,
'UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued
'FROM(Products)
Dim DataTable_prod As New ProductDataSet.ProductsDataTable
Adp_prod.Fill(DataTable_prod)
'products.ProductNameを得る
Dim pName As String = DataTable_prod(0).ProductName
Label1.Text = pName
'products.ProductIDを得る
Dim pID As String = DataTable_prod(0).ProductID
Label2.Text = pID
'products.CategoryIDを得る
Dim cID As String = DataTable_prod(0).CategoryID
Label3.Text = cID
'リレーションを辿って、CategoryNameを得る
'※以下の行で、オブジェクト参照がオブジェクト インスタンスに設定されていません。のエラー
Dim cName As String = DataTable_prod(0).CategoriesRow.CategoryName
Label4.Text = cName
End If
End Sub
End Class
親子テーブルの各々を独立的にインスタンス化して、そこにデータを流し込んでいるのが原因です。
Dim pds As New ProductDataSet
Adp_cate.Fill(pds.CategoriesDataTable)
Adp_prod.Fill(pds.ProductsDataTable)
こういったやり方で試してみてください。
お礼
edp3142さん。ご回答ありがとうございました。 ご指摘の箇所を修正しましたら、読み込むことができました。 たいへん、ありがとうございました。