15. http://biki.jp.net/enterprisenet
テーブルの読み出し
① DataSetのテーブル名を指定
② 型付DataSetのテーブルを指定
データベースからデータの読込①
Dim ds As New DataSet()
Dim adapter As New OleDbDataAdapter( _
"SELECT * FROM publishers", connectionString)
adapter.Fill(ds, "publishers")
Dim ds As New SampleDataset()
Dim adapter As New OleDbDataAdapter( _
"SELECT * FROM publishers", connectionString)
adapter.Fill(ds.publishers)
16. http://biki.jp.net/enterprisenet
テーブルの読み出し
① DataSetのテーブル名を指定
② 型付DataSetのテーブルを指定
データベースからデータの読込①
DataSet ds = new DataSet();
OleDbDataAdapter adapter = new OleDbDataAdapter(
"SELECT * FROM publishers", connectionString);
adapter.Fill(ds, "publishers");
SampleDataset ds = new SampleDataset();
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM
publishers", connectionString);
adapter.Fill(ds.publishers);
18. http://biki.jp.net/enterprisenet
データベースからデータの読込②
複数テーブルの読み出し
Dim ds As New SampleDataset()
Dim adapterPublishers As New OleDbDataAdapter( _
"SELECT * FROM publishers", connectionString)
adapterPublishers.Fill(ds.publishers)
Dim adapterTitles As New OleDbDataAdapter( _
"SELECT * FROM titles", connectionString)
adapterTitles.Fill(ds.titles)
19. http://biki.jp.net/enterprisenet
データベースからデータの読込②
複数テーブルの読み出し
SampleDataset ds = new SampleDataset();
OleDbDataAdapter adapterPublishers = new OleDbDataAdapter(
"SELECT * FROM publishers", connectionString);
adapterPublishers.Fill(ds.publishers);
OleDbDataAdapter adapterTitles = new OleDbDataAdapter(
"SELECT * FROM titles", connectionString);
adapterTitles.Fill(ds.titles);
24. http://biki.jp.net/enterprisenet
データベースからデータの読込④
Dim ds As New SampleDataset()
ds.titles.commentColumn.Expression = "Parent.pub_name"
Dim adapterPublishers As New OleDbDataAdapter( _
"SELECT * FROM publishers", connectionString)
adapterPublishers.Fill(ds.publishers)
Dim adapterTitles As New OleDbDataAdapter( _
"SELECT * FROM titles", connectionString)
adapterTitles.Fill(ds.titles)
DataSet内の他のテーブルデータの利用
ヘッダー/明細型のDataSetで明細行にヘッダーカラムを
表示したい場合などにも利用
25. http://biki.jp.net/enterprisenet
データベースからデータの読込④
SampleDataset ds = new SampleDataset();
ds.titles.commentColumn.Expression = "Parent.pub_name";
OleDbDataAdapter adapterPublishers = new OleDbDataAdapter(
"SELECT * FROM publishers", connectionString);
adapterPublishers.Fill(ds.publishers);
OleDbDataAdapter adapterTitles = new OleDbDataAdapter(
"SELECT * FROM titles", connectionString);
adapterTitles.Fill(ds.titles);
DataSet内の他のテーブルデータの利用
ヘッダー/明細型のDataSetで明細行にヘッダーカラムを
表示したい場合などにも利用
40. http://biki.jp.net/enterprisenet
リレーションを利用したアクセス
(親から子テーブル)
'行オブジェクトの宣言
Dim childRows() As DataRow
'リレーション名がpublisherstitlesで関連している子の1つ目のtitle列の値を取得
childRows = parentRow.GetChildRows("publisherstitles")
title = DirectCast(childRows(0)("title"), String)
'上記をまとめて行う場合
title = DirectCast(parentRow.GetChildRows("publisherstitles")(0)("title"), String)
'型付行オブジェクトの宣言
Dim typedChildRows() As SampleDataset.titlesRow
'関連しているtitlesテーブルの1つ目のtitle列の値を取得
typedChildRows = typedParentRow.GettitlesRows()
title = typedChildRows(0).title
'上記をまとめて行う場合
title = typedParentRow.GettitlesRows()(0).title
型付DataSet
DataSet
41. http://biki.jp.net/enterprisenet
リレーションを利用したアクセス
(子から親テーブル)
'行オブジェクトの宣言
Dim parentRow As DataRow
'リレーション名がpublisherstitlesで関連している親のpub_name値を取得
parentRow = typedChildRows(0).GetParentRow("publisherstitles")
pub_name = DirectCast(parentRow("pub_name"), String)
'上記をまとめて行う場合
pub_name = DirectCast(typedChildRows(0).GetParentRow("publisherstitles")("pub_name"), String)
'型付行オブジェクトの宣言
Dim typedParentRow As SampleDataset.publishersRow
'親テーブルpublishersのpub_name値を取得
typedParentRow = typedChildRows(0).publishersRow
pub_name = typedParentRow.pub_name
'上記をまとめて行う場合
pub_name = typedChildRows(0).publishersRow.pub_name
型付DataSet
DataSet
64. http://biki.jp.net/enterprisenet
データのマージ
'1つ目のDataSetにデータを読み込む
Dim targetDataSet As New SampleDataset()
Dim adapterPublishers As New OleDbDataAdapter( _
"SELECT * FROM publishers", connectionString)
adapterPublishers.Fill(targetDataSet.publishers)
'2つ目のDataSetにデータを読み込む
Dim srcDataSet As New DataSet()
Dim adapterTitles As New OleDbDataAdapter( _
"SELECT * FROM titles", connectionString)
adapterTitles.Fill(srcDataSet, "titles")
'1つ目のDataSetに2つ目のDataSetのデータをマージ
targetDataSet.Merge(srcDataSet)
65. http://biki.jp.net/enterprisenet
データのマージ
//1つ目のDataSetにデータを読み込む
SampleDataset targetDataSet = new SampleDataset();
OleDbDataAdapter adapterPublishers = new OleDbDataAdapter(
"SELECT * FROM publishers", connectionString);
adapterPublishers.Fill(targetDataSet.publishers);
//2つ目のDataSetにデータを読み込む
DataSet srcDataSet = new DataSet();
OleDbDataAdapter adapterTitles = new OleDbDataAdapter(
"SELECT * FROM titles", connectionString);
adapterTitles.Fill(srcDataSet, "titles");
//1つ目のDataSetに2つ目のDataSetのデータをマージ
targetDataSet.Merge(srcDataSet);
66. http://biki.jp.net/enterprisenet
行の特定バージョンへのアクセス
列の値にアクセス際に別バージョン(DataRowVersion ) を指
定することで特定のバージョン行にアクセスできる
行の別のバージョンは行の編集後、行で AcceptChanges メソッドが呼
び出される前にだけ存在。AcceptChanges メソッドの呼び出し後は、現
在のバージョンと元のバージョンが同じになる
1 名前1 住所1 TEL1
1 名前1 住所2 TEL1
初期データ(RowState=Unchanged)
変更データ(RowState=Modified)
1 名前1 住所2 TEL1
確定データ(RowState= Unchanged )
① 行のデータを変更
Original バージョン
Current バージョン
② 変更データを確定
90. http://biki.jp.net/enterprisenet
データセットのデータの検証
変更イベントのハンドリング
Private Sub table_ColumnChanging( _
ByVal sender As Object, ByVal e As DataColumnChangeEventArgs)
''発生したカラム名の確認
If e.Column.ColumnName = "pub_name" Then
Dim newValue As String = DirectCast(e.ProposedValue, String)
If newValue.Trim().Length > 10 Then
MessageBox.Show("10文字以下で入力してください", "入力エラー")
Throw New ApplicationException("10文字以下で入力してください")
End If
End If
End Sub
95. http://biki.jp.net/enterprisenet
DataSet Tips
Partial Classの利用
独自の計算式などを実装することが可能
画面のデータバインド処理に便利
partial class AuthorsData {
partial class authorsRow {
public int TitleCount {
get { return this.GettitleauthorRows().Length; }
}
}
}
Partial Class AuthorsDataSet
Partial Class authorsRow
Public ReadOnly Property TitleCount() As Integer
Get
Return Me.GettitleauthorRows().Length
End Get
End Property
End Class
End Class