SlideShare una empresa de Scribd logo
1 de 96
Descargar para leer sin conexión
http://biki.jp.net/enterprisenet
DataSet プログラミング入門
http://biki.jp.net/enterprisenet
内容
 目的
 ADO.NETの主要機能であるDataSetの基本的なプログラミング手法
を理解する
 アジェンダ
 ADO.NETの概要
 DataSetの概要
 型付DataSetの定義
 データベースからデータの読込
 DataSetデータのアクセス
 DataSetデータの編集
 DataSetの利用
 DataSet応用&Tips
http://biki.jp.net/enterprisenet
ADO.NETの概要
http://biki.jp.net/enterprisenet
ADO.NETの概要
 ADO.NET の主要コンポーネント
 DataSet
 .NET データ プロバイダ
 DataSet
 ADO.NET の非接続型アーキテクチャの中心となるコンポーネント
 データの行と列で構成される複数の DataTable のコレクションから構成
 DataTable オブジェクトはデータに関する主キー、外部キー、制約およ
び、リレーションシップ情報から構成されている
 .NET データ プロバイダ
 Connection オブジェクトはデータ ソースとの接続機能を提供
 Command オブジェクトによってデータベース コマンドにアクセス
 DataReader はデータ ソースからの高いパフォーマンスの読み取り機能
 DataAdapter は DataSet オブジェクトとデータベースの間のブリッジを
提供
DataSetの概要
DataSet
DataRow(行)
DataTable
DataColumn(列)
DataTable
(テーブル)
DataTable
DataRelation
Constraint(制約)
(リレーション)
DataView
http://biki.jp.net/enterprisenet
DataSetの概要
 DataTable
 メモリ常駐データを含む単一テーブルを表現
 DataColumn、DataRow、Constraintのコレクションを保持
 DataColumn
 テーブルの列のスキーマ情報
 列名、データ型
 DataRow
 テーブルの行データ
 現在の変更状態や現在・変更前の複数バージョンのデータを保持
 Constraint
 列に適用する制約
 主キー制約、一意キー制約
 DataRelation
 2 つの DataTable オブジェクト間の親子のリレーションシップ
 リレーションシップを利用するとDataSet 内部のテーブル間を移動できる
 DataView
 並べ替え、フィルタ処理などカスタマイズされた DataTable のビューを提供
http://biki.jp.net/enterprisenet
型付DataSetの定義
定義するサンプルDataSet
pub_id pub_name ….
SampleDataset
publishers テーブル(親)
Title_id title … Pub_id … comment
titles テーブル(子)
http://biki.jp.net/enterprisenet
データセットの作成
① プロジェクト-新しい項目の追加
② データセットを選択
http://biki.jp.net/enterprisenet
型付DataSetのテーブル定義
 大きくは以下の2つの方法を利用
 ツールボックスを利用してマニュアルで作成
 既存のデータベースのテーブルを利用して作成
サーバーエクスプローラのテーブルをDrag&Drop
http://biki.jp.net/enterprisenet
型付DataSetのテーブル定義
 複数のテーブルを配置することが可能
TableAdapterは
今回不要なので
削除しています
追加のテーブルをDrag&Drop
http://biki.jp.net/enterprisenet
型付DataSetのリレーション定義
 リレーションの作成
 複数配置したテーブル間に関係を設定
①子テーブルを右クリックし「追加」-「リレーション」で作成
②ウイザードを利用して関連するカラムを設定
http://biki.jp.net/enterprisenet
データベースからデータの読込
http://biki.jp.net/enterprisenet
データベースからデータの読込①
 テーブルの読み出し
….pub_namepub_id ….pub_namepub_id
SampleDataset
publishers テーブル(親)
… commentPub_id…titleTitle_id … commentPub_id…titleTitle_id
titles テーブル(子)
型付DataSet
DataSet
データベース DataAdapter.Fill
① DataSetのテーブル名を指定
② 型付DataSetのテーブルを指定
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)
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);
http://biki.jp.net/enterprisenet
データベースからデータの読込②
 複数テーブルの読み出し
….pub_namepub_id ….pub_namepub_id
SampleDataset
publishers テーブル(親)
… commentPub_id…titleTitle_id … commentPub_id…titleTitle_id
titles テーブル(子)
データベース DataAdapter.Fill
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)
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);
http://biki.jp.net/enterprisenet
データベースからデータの読込③
 データベースの複数テーブルをJoinした結果の読み出し
データベース DataAdapter.Fill
….pub_namepub_id ….pub_namepub_id
SampleDataset
publishers テーブル(親)
… commentPub_id…titleTitle_id … commentPub_id…titleTitle_id
titles テーブル(子)
http://biki.jp.net/enterprisenet
データベースからデータの読込③
 データベースの複数テーブルをJoinした結果の読み出し
Dim adapterTitles As New OleDbDataAdapter( _
"SELECT titles.*, publishers.pub_name AS comment FROM
titles INNER JOIN publishers ON titles.pub_id =
publishers.pub_id", connectionString)
adapterTitles.Fill(ds.titles)
http://biki.jp.net/enterprisenet
データベースからデータの読込③
 データベースの複数テーブルをJoinした結果の読み出し
OleDbDataAdapter adapterTitles = new OleDbDataAdapter(
“SELECT titles.*, publishers.pub_name AS comment FROM
titles INNER JOIN publishers ON titles.pub_id =
publishers.pub_id", connectionString);
adapterTitles.Fill(ds.titles);
http://biki.jp.net/enterprisenet
データベースからデータの読込④
 DataSet内の他のテーブルデータの利用
pub_id pub_name ….
1 AAAA
2 BBBB
Title_id title … Pub_id … comment
1 AAAA
1 AAAA
2 BBBB
titles テーブル(子)
Titlesのcomment列に
親テーブルであるpublishersの
関連する行の値が
自動的に設定される
Expression = "Parent.pub_name"
publishers テーブル(親)
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で明細行にヘッダーカラムを
表示したい場合などにも利用
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で明細行にヘッダーカラムを
表示したい場合などにも利用
http://biki.jp.net/enterprisenet
DataColumn.Expressionによる計算列
 UnitPrice * 0.086  UnitPrice列 * 0.086 の計算結果
 Count(OrderID)  列の総数
 UnitPrice * Quantity  UnitPrice列 * Quantity列 の計算結果
 Parent.Price  親テーブルの関連する行のPrice列の値
 Avg(Child(Orders2Details).Price)
 Orders2Details リレーションで関連する子テーブルのPriceの平均
 Sum(Price)  Priceの合計
 Convert(total, ‘System.Int32’)  型変換
 Len(ItemName)  文字列長
 IsNull(price, -1)  Nullチェック
 IIF(total>1000, ‘expensive’, ‘dear’)  条件式
 SUBSTRING(phone, 7, 8)  文字列の取り出し
http://biki.jp.net/enterprisenet
DataSetデータのアクセス
http://biki.jp.net/enterprisenet
テーブル( DataTable )へのアクセス
 DataSetのTablesプロパティを利用してアクセス
 型付DataSetではTable名で直接アクセス可
 型付DataSetではTableごとにDataTableの派生クラスが提供される
….pub_namepub_id ….pub_namepub_id
SampleDataset
publishers テーブル(親)
… commentPub_id…titleTitle_id … commentPub_id…titleTitle_id
titles テーブル(子)
SampleDataset.titlesDataTable クラス
SampleDataset.publishersDataTable クラス
http://biki.jp.net/enterprisenet
テーブル( DataTable )へのアクセス
'テーブル数の取得
tablesCount = ds.Tables.Count
'テーブルオブジェクトの宣言
Dim table As DataTable
'1番目のテーブルを取得
table = ds.Tables(0)
'テーブル名がpublishersのテーブルを取得
table = ds.Tables("publishers")
'テーブル数の取得
tablesCount = typedDs.Tables.Count
'型付テーブルオブジェクトの宣言
Dim typedTable As SampleDataset.publishersDataTable
'publishersテーブルを取得
typedTable = typedDs.publishers
型付DataSet
DataSet
http://biki.jp.net/enterprisenet
テーブル( DataTable )へのアクセス
//テーブル数の取得
tablesCount = ds.Tables.Count;
//テーブルオブジェクトの宣言
DataTable table;
//1番目のテーブルを取得
table = ds.Tables[0];
//テーブル名がpublishersのテーブルを取得
table = ds.Tables["publishers"];
//テーブル数の取得
tablesCount = typedDs.Tables.Count;
//型付テーブルオブジェクトの宣言
SampleDataset.publishersDataTable typedTable;
//publishersテーブルを取得
typedTable = typedDs.publishers;
型付DataSet
DataSet
http://biki.jp.net/enterprisenet
列(DataColumn)へのアクセス
 DataTableのColumnsプロパティを利用してアクセス
 型付DataSetではカラム名付与されたプロパティで直接アクセス可
….pub_namepub_id ….pub_namepub_id
SampleDataset
publishers テーブル(親)
… commentPub_id…titleTitle_id … commentPub_id…titleTitle_id
titles テーブル(子)
typedTable.pub_nameColumn プロパティ
http://biki.jp.net/enterprisenet
列(DataColumn)へのアクセス
'列数の取得
columnsCount = table.Columns.Count
'列オブジェクトの宣言
Dim column As DataColumn
'テーブルの2列目の定義情報を取得
column = table.Columns(1)
'テーブルのpub_name列目の定義情報を取得
column = table.Columns("pub_name")
'列数の取得
columnsCount = typedTable.Columns.Count
'テーブルのpub_name列目の定義情報を取得
column = typedTable.pub_nameColumn
型付DataSet
DataSet
http://biki.jp.net/enterprisenet
列(DataColumn)へのアクセス
//列数の取得
columnsCount = table.Columns.Count;
//列オブジェクトの宣言
DataColumn column;
//テーブルの2列目の定義情報を取得
column = table.Columns[1];
//テーブルのpub_name列の定義情報を取得
column = table.Columns["pub_name"];
//列数の取得
columnsCount = typedTable.Columns.Count;
//テーブルのpub_name列目の定義情報を取得
column = typedTable.pub_nameColumn;
型付DataSet
DataSet
http://biki.jp.net/enterprisenet
行(DataRow)・データへのアクセス
 DataTableのRowsプロパティを利用してアクセス
 型付DataSetではTableごとにDataRowの派生クラスが提供される
….pub_namepub_id ….pub_namepub_id
SampleDataset
publishers テーブル(親)
… commentPub_id…titleTitle_id … commentPub_id…titleTitle_id
titles テーブル(子)
SampleDataset.publishersRow クラス
SampleDataset.titlesRow クラス
http://biki.jp.net/enterprisenet
行(DataRow)・データへのアクセス
'行数の取得(0の場合は行がない)
rowsCount = table.Rows.Count
'行オブジェクトの宣言
Dim row As DataRow
'テーブルの1行目を取得
row = table.Rows(0)
'pub_name列の値を取得
pub_name = DirectCast(row("pub_name"), String)
'テーブルから直接1行目の2番目の列(pub_name)の値を取得
pub_name = DirectCast(table.Rows(0)(1), String)
'テーブルから直接1行目のpub_nameの列の値を取得
pub_name = DirectCast(table.Rows(0)("pub_name"), String)
DataSet
http://biki.jp.net/enterprisenet
行(DataRow)・データへのアクセス
'行数の取得(0の場合は行がない)
rowsCount = typedTable.Rows.Count
'型付行オブジェクトの宣言
Dim typedRow As SampleDataset.publishersRow
'テーブルの1行目を取得
typedRow = typedTable(0)
'pub_name列の値を取得
pub_name = typedRow.pub_name
'テーブルから直接1行目のpub_nameの列の値を取得
pub_name = typedTable(0).pub_name
型付DataSet
http://biki.jp.net/enterprisenet
行(DataRow)・データへのアクセス
//行数の取得(0の場合は行がない)
rowsCount = table.Rows.Count;
//行オブジェクトの宣言
DataRow row;
//テーブルの1行目を取得
row = table.Rows[0];
//pub_name列の値を取得
pub_name = (string)row["pub_name"];
//テーブルから直接1行目の2番目の列(pub_name)の値を取得
pub_name = (string)table.Rows[0][1];
//テーブルから直接1行目のpub_nameの列の値を取得
pub_name = (string)table.Rows[0]["pub_name"];
DataSet
http://biki.jp.net/enterprisenet
行(DataRow)・データへのアクセス
//行数の取得(0の場合は行がない)
rowsCount = typedTable.Rows.Count;
//型付行オブジェクトの宣言
SampleDataset.publishersRow typedRow;
//テーブルの1行目を取得
typedRow = typedTable[0];
//pub_name列の値を取得
pub_name = typedRow.pub_name;
//テーブルから直接1行目のpub_nameの列の値を取得
pub_name = typedTable[0].pub_name;
型付DataSet
http://biki.jp.net/enterprisenet
リレーションを利用したアクセス
 RowのGetChildRowsメソッド(親から子)・GetParentRowプロパティ(子
から親)を利用してアクセス
 型付DataSetではアクセス用メソッド・プロパティが提供される
….pub_namepub_id ….pub_namepub_id
SampleDataset
publishers テーブル(親)
… commentPub_id…titleTitle_id … commentPub_id…titleTitle_id
titles テーブル(子)
GettitlesRows メソッド
publishersRow プロパティ
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
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
http://biki.jp.net/enterprisenet
リレーションを利用したアクセス
(親から子テーブル)
//行オブジェクトの宣言
DataRow[] childRows;
//リレーション名がpublisherstitlesで関連している子の1つ目のtitle列の値を取得
childRows = parentRow.GetChildRows("publisherstitles");
title = (string)childRows[0]["title"];
//上記をまとめて行う場合
title = (string)parentRow.GetChildRows("publisherstitles")[0]["title"];
//型付行オブジェクトの宣言
SampleDataset.titlesRow[] typedChildRows;
//関連しているtitlesテーブルの1つ目のtitle列の値を取得
typedChildRows = typedParentRow.GettitlesRows();
title = typedChildRows[0].title;
//上記をまとめて行う場合
title = typedParentRow.GettitlesRows()[0].title;
型付DataSet
DataSet
http://biki.jp.net/enterprisenet
リレーションを利用したアクセス
(子から親テーブル)
DataRow parentRow; //行オブジェクトの宣言
//リレーション名がpublisherstitlesで関連している親のpub_name値を取得
parentRow = typedChildRows[0].GetParentRow("publisherstitles");
pub_name = (string)parentRow["pub_name"];
//上記をまとめて行う場合
pub_name =(string)
typedChildRows[0].GetParentRow("publisherstitles")["pub_name"];
//型付行オブジェクトの宣言
SampleDataset.publishersRow typedParentRow;
//親テーブルpublishersのpub_name値を取得
typedParentRow = typedChildRows[0].publishersRow;
pub_name = typedParentRow.pub_name;
//上記をまとめて行う場合
pub_name = (string)typedChildRows[0].publishersRow.pub_name;
型付DataSet
DataSet
http://biki.jp.net/enterprisenet
主キーを利用した行の検索
 DataRowのFindメソッドを利用して行を検索
 型付DataSetでは専用の検索メソッドが提供される
….pub_namepub_id ….pub_namepub_id
SampleDataset
publishers テーブル(親)
… commentPub_id…titleTitle_id … commentPub_id…titleTitle_id
titles テーブル(子)
publishersDataTable.FindBypub_id メソッド
titlesDataTable.FindBytitle_id メソッド
検索
検索
http://biki.jp.net/enterprisenet
主キーを利用した行の検索
'行オブジェクトの宣言
Dim row As DataRow
'主キーの値が1389の行を取得
row = table.Rows.Find("1389")
'型付行オブジェクトの宣言
Dim typedRow As SampleDataset.publishersRow
'主キーpub_idの値が1389の行を取得
typedRow = typedTable.FindBypub_id("1389")
型付DataSet
DataSet
http://biki.jp.net/enterprisenet
主キーを利用した行の検索
//行オブジェクトの宣言
DataRow row;
//主キーの値が1389の行を取得
row = table.Rows.Find("1389");
//型付行オブジェクトの宣言
SampleDataset.publishersRow typedRow;
//主キーpub_idの値が1389の行を取得
typedRow = typedTable.FindBypub_id("1389");
型付DataSet
DataSet
http://biki.jp.net/enterprisenet
DataSetデータの編集
http://biki.jp.net/enterprisenet
行の追加
 DataTableのNewRowメソッドを利用して行を追加
 型付DataSetではテーブル毎の追加メソッドが提供される
….pub_namepub_id ….pub_namepub_id
SampleDataset
publishers テーブル(親)
… commentPub_id…titleTitle_id … commentPub_id…titleTitle_id
titles テーブル(子)
publishersDataTable. AddpublishersRow メソッド
titlesDataTable. AddtitlesRow メソッド
追加
追加
http://biki.jp.net/enterprisenet
行の追加
'行オブジェクトの作成
row = table.NewRow()
'データの値の設定
row("pub_id") = "pub_id1"
row("pub_name") = "pub_name1"
row("city") = "city1"
row("state") = "state1"
row("country") = "country1"
'行オブジェクトのテーブルへの追加
table.Rows.Add(row)
DataSet
'行オブジェクトのテーブルへの追加
typedRow = typedTable.AddpublishersRow( _
"pub_id2", "pub_name2", "city2", "state2", "country2")
型付DataSet
http://biki.jp.net/enterprisenet
行の追加
//行オブジェクトの作成
row = table.NewRow();
//データの値の設定
row["pub_id"] = "pub_id1";
row["pub_name"] = "pub_name1";
row["city"] = "city1";
row["state"] = "state1";
row["country"] = "country1";
//行オブジェクトのテーブルへの追加
table.Rows.Add(row);
DataSet
//行オブジェクトのテーブルへの追加
typedRow = typedTable.AddpublishersRow(
"pub_id2", "pub_name2", "city2", "state2", "country2");
型付DataSet
http://biki.jp.net/enterprisenet
行の変更
 行のアイテムに値を代入
….pub_namepub_id ….pub_namepub_id
SampleDataset
publishers テーブル(親)
… commentPub_id…titleTitle_id … commentPub_id…titleTitle_id
titles テーブル(子)
新しい値
変更
http://biki.jp.net/enterprisenet
行の変更
'行オブジェクトの宣言
Dim row As DataRow
'行オブジェクトの取得
row = table.Rows(0)
'データの値の変更
row("pub_name") = "pub_name1"
row("city") = "city1"
'型付行オブジェクトの宣言
Dim typedRow As SampleDataset.publishersRow
'行オブジェクトの取得
typedRow = typedTable(0)
'データの値の変更
typedRow.pub_name = "pub_name2"
typedRow.city = "city2"
型付DataSet
DataSet
http://biki.jp.net/enterprisenet
行の変更
//行オブジェクトの宣言
DataRow row;
//行オブジェクトの取得
row = table.Rows[0];
//データの値の変更
row["pub_name"] = "pub_name1";
row["city"] = "city1";
//型付行オブジェクトの宣言
SampleDataset.publishersRow typedRow;
//行オブジェクトの取得
typedRow = typedTable[0];
//データの値の変更
typedRow.pub_name = "pub_name2";
typedRow.city = "city2";
型付DataSet
DataSet
http://biki.jp.net/enterprisenet
行の削除
 DataRowのDeleteメソッドを利用して行を削除
….pub_namepub_id ….pub_namepub_id
SampleDataset
publishers テーブル(親)
… commentPub_id…titleTitle_id … commentPub_id…titleTitle_id
titles テーブル(子)
削除
削除
http://biki.jp.net/enterprisenet
行の削除
'2番目の行オブジェクトの削除
table.Rows(1).Delete()
'主キーで行オブジェクトの削除
Dim row As DataRow
row = table.Rows.Find("1389")
row.Delete()
'主キーで行オブジェクトの削除
Dim typedRow As SampleDataset.publishersRow
typedRow = typedTable.FindBypub_id("9999")
typedRow.Delete()
型付DataSet
DataSet
http://biki.jp.net/enterprisenet
行の削除
//2番目の行オブジェクトの削除
table.Rows[1].Delete();
//主キーで行オブジェクトの削除
DataRow row;
row = table.Rows.Find("1389");
row.Delete();
//主キーで行オブジェクトの削除
SampleDataset.publishersRow typedRow;
typedRow = typedTable.FindBypub_id("9999");
typedRow.Delete();
型付DataSet
DataSet
http://biki.jp.net/enterprisenet
変更データの確定と破棄
 変更の確定 AcceptChangesメソッド
 変更の破棄 RejectChangesメソッド
 DataSet,DataTable,DataRow単位で利用可能
….pub_namepub_id ….pub_namepub_id
SampleDataset
publishers テーブル(親)
… commentPub_id…titleTitle_id … commentPub_id…titleTitle_id
titles テーブル(子)
DataSet. AcceptChanges
DataSet. RejectChanges
DataTable. AcceptChanges
DataTable. RejectChanges
DataRow. AcceptChanges
DataRow. RejectChanges
http://biki.jp.net/enterprisenet
変更データの確定と破棄
Dim row As DataRow
row = table.Rows(0)
row("pub_name") = "pub_name1"
row("city") = "city1"
'変更した行データの確定(行単位)
row.AcceptChanges()
row = table.Rows(1)
row("pub_name") = "pub_name1"
row("city") = "city1"
row = table.Rows(2)
row("pub_name") = "pub_name1"
row("city") = "city1"
'変更したデータの確定(DataSet全体)
ds.AcceptChanges()
http://biki.jp.net/enterprisenet
変更データの確定と破棄
Dim row As DataRow
row = table.Rows(0)
row("pub_name") = "pub_name1"
row("city") = "city1"
'変更したデータの破棄(行単位)
row.RejectChanges()
row = table.Rows(1)
row("pub_name") = "pub_name1"
row("city") = "city1"
row = table.Rows(2)
row("pub_name") = "pub_name1"
row("city") = "city1"
'変更したデータの破棄(DataSet全体)
ds.RejectChanges()
http://biki.jp.net/enterprisenet
変更データの確定と破棄
DataRow row;
row = table.Rows[0];
row["pub_name"] = "pub_name1";
row["city"] = "city1";
//変更した行データの確定(行単位)
row.AcceptChanges();
row = table.Rows[1];
row["pub_name"] = "pub_name1";
row["city"] = "city1";
row = table.Rows[2];
row["pub_name"] = "pub_name1";
row["city"] = "city1";
//変更したデータの確定(DataSet全体)
ds.AcceptChanges();
http://biki.jp.net/enterprisenet
変更データの確定と破棄
DataRow row;
row = table.Rows[0];
row["pub_name"] = "pub_name1";
row["city"] = "city1";
//変更したデータの破棄(行単位)
row.RejectChanges();
row = table.Rows[1];
row["pub_name"] = "pub_name1";
row["city"] = "city1";
row = table.Rows[2];
row["pub_name"] = "pub_name1";
row["city"] = "city1";
//変更したデータの破棄(DataSet全体)
ds.RejectChanges();
http://biki.jp.net/enterprisenet
DataSetの利用
http://biki.jp.net/enterprisenet
データのマージ
 DataSetのMergeメソッドを利用してデータをマージするこ
とができる
 利用可能なデータソースはDataSet、DataTableとDataRow配列
….pub_namepub_id ….pub_namepub_id
SampleDataset
publishers テーブル(親)
… commentPub_id…titleTitle_id … commentPub_id…titleTitle_id
titles テーブル(子)
….pub_namepub_id ….pub_namepub_id
publishers テーブル(親)
… commentPub_id…titleTitle_id … commentPub_id…titleTitle_id
titles テーブル(子)
Merge
… commentPub_id…titleTitle_id … commentPub_id…titleTitle_id
titles テーブル(子)
DataRow()
DataTable
DataSet
データソース
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)
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);
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 バージョン
② 変更データを確定
http://biki.jp.net/enterprisenet
行の特定バージョンへのアクセス
'行の状態を取得(Unchanged)
stat = table.Rows(0).RowState
'データの値の変更
row = table.Rows(0)
row("pub_name") = "pub_name1"
'行の状態を取得(Modified)
stat = table.Rows(0).RowState
'変更前データの取得(元データ)
Dim originalPubName As String = _
DirectCast(row("pub_name", DataRowVersion.Original), String)
'型付DataSetの場合
originalPubName = _
DirectCast(typedTable(0)("pub_name", DataRowVersion.Original), String)
'変更データの確定
row.AcceptChanges()
'変更前データの取得(変更データ)
originalPubName = DirectCast(row("pub_name", DataRowVersion.Original), String)
http://biki.jp.net/enterprisenet
行の特定バージョンへのアクセス
//行の状態を取得(Unchanged)
stat = table.Rows[0].RowState;
//データの値の変更
row = table.Rows[0];
row["pub_name"] = "pub_name1";
//行の状態を取得(Modified)
stat = table.Rows[0].RowState;
//変更前データの取得(元データ)
string originalPubName = (string)row["pub_name", DataRowVersion.Original];
//型付DataSetの場合
originalPubName = (string)typedTable[0]["pub_name", DataRowVersion.Original];
//変更データの確定
row.AcceptChanges();
//変更前データの取得(変更データ)
originalPubName = (string)row["pub_name", DataRowVersion.Original];
http://biki.jp.net/enterprisenet
 DataRowVersionの値
 DataRowStateの値
DataRowState ・DataRowVersion
Current この行には現在の値が格納されています
Default 現在の DataRowState に従った既定の行バージョン
Original この行には元の値が格納されています
Proposed この行には提示された値が格納されています
Added 行が DataRowCollection に追加されましたが、 AcceptChanges が呼
び出されていません
Deleted DataRow の Delete メソッドを使用して行が削除されました
Detached 行が作成されましたが、どの DataRowCollection にも追加されていま
せん。 DataRow は、作成された直後からコレクションに追加されるまで
の間、またはコレクションから削除された場合に、この状態になります
Modified 行が変更されましたが、 AcceptChanges が呼び出されていません
Unchanged 前回 AcceptChanges が呼び出されて以降、この行は変更されていま
せん。
http://biki.jp.net/enterprisenet
変更された行の取得
 DataSet(もしくはDataTable)のGetChangesメソッドを利用して
変更されたレコードだけをデータセットから抽出できる
pub_id pub_name …
.
1 名前1
2 名前2X
3 名前3
pub_id pub_name ….
2 名前2XGetChanges
変更された行
http://biki.jp.net/enterprisenet
変更された行の取得
スマートクライアントでの利用例
pub_id pub_name ….
1 名前1
2 名前2X
3 名前3
pub_id pub_name ….
2 名前2X
③ GetChanges
pub_id pub_name ….
1 名前1
2 名前2
3 名前3
② データの変更
pub_id pub_name ….
1 名前1
2 名前2X
3 名前3
pub_id pub_name ….
1 名前1
2 名前2
3 名前3
pub_id pub_name ….
2 名前2X
④ 転送
① 転送
⑤マージ
Web サーバークライアント
http://biki.jp.net/enterprisenet
変更された行の取得
'編集用のコピーDataSetを作成(クライアントの取得)
copyDataSet.Merge(orignalDataSet)
'DataSetの値の変更(クライアントでの編集)
copyDataSet.publishers(0).pub_name = "pub_name1"
'差分データの取得(転送データの作成)
Dim changeDataSet As SampleDataset
changeDataSet = DirectCast(copyDataSet.GetChanges(), SampleDataset)
MessageBox.Show("差分データ = " + changeDataSet.GetXml())
'元データへの差分データの反映(サーバーへの反映)
orignalDataSet.Merge(changeDataSet)
http://biki.jp.net/enterprisenet
変更された行の取得
//編集用のコピーDataSetを作成(クライアントの取得)
copyDataSet.Merge(originalDataSet);
//DataSetの値の変更(クライアントでの編集)
copyDataSet.publishers[0].pub_name = "pub_name1";
//差分データの取得(転送データの作成)
SampleDataset changeDataSet;
changeDataSet = (SampleDataset)copyDataSet.GetChanges();
MessageBox.Show("差分データ = " + changeDataSet.GetXml());
//元データへの差分データの反映(サーバーへの反映)
originalDataSet.Merge(changeDataSet);
http://biki.jp.net/enterprisenet
データのフィルタとソート
 DataViewを利用して1つのDataTableをフィルタしたり
ソートすることができる
 複数のDataTableをJoinするようなDataViewは作成できないため、
DataColumnのExpressionを利用した他のテーブル列を取り込んだ
DataTableをあらかじめ作成しておく
….pub_namepub_id ….pub_namepub_id
SampleDataset
publishers テーブル(親)
… commentPub_id…titleTitle_id … commentPub_id…titleTitle_id
titles テーブル(子)
Title_id title … Pub_id … comment
DataView
フィルタ:DataView.RowFilterプロパティ
ソート:DataView.Sortプロパティ
http://biki.jp.net/enterprisenet
データのフィルタとソート
'DataViewを利用したフィルタ
Dim dv As New DataView()
dv.Table = table
dv.RowFilter = "country='USA'"
'DataViewを利用したソート
Dim dv As New DataView()
dv.Table = table
dv.Sort = "pub_name"
http://biki.jp.net/enterprisenet
データのフィルタとソート
//DataViewを利用したフィルター
DataView dv = new DataView();
dv.Table = table;
dv.RowFilter = "country='USA'";
//DataViewを利用したソート
DataView dv = new DataView();
dv.Table = table;
dv.Sort = "pub_name";
http://biki.jp.net/enterprisenet
カラムの絞り込みと Distinct
 DataViewのToTableを利用すると、元のデータの一部
のカラムを取り出すことができる
 さらに、同じデータを1つにまとめることもできます
(Distinct機能 )
'DataViewを利用したDistinct
Dim view As DataView = New DataView(table)
Dim newTable As DataTable = view.ToTable(“UniqueData”, True,
"Category", "QuantityInStock")
//DataViewを利用した Distinct
DataView view = new DataView(table);
DataTable newTable = view.ToTable("UniqueData", true, "Category",
"QuantityInStock");
http://biki.jp.net/enterprisenet
DataSet応用&Tips
http://biki.jp.net/enterprisenet
DBNullのハンドリング
 DataColumnのプロパティ
 AllowDBNull
 この列に null (VBでは Nothing)値を格納できるかどうかを示す値
 DefaultValue
 新しい行を作成するときに使用されるこの列の既定値
 DataTableへの行追加時に便利
 DataTableのNewRowで作成した行に既定値が設定される
 注意
 データベースから読み出したNULL値は置換されない
 後述するデザイナで指定するNullValueを利用
http://biki.jp.net/enterprisenet
DBNullのハンドリング
 型付DataSet デザイナでの設定(続き)
 NullValue
 (Throw Exception)(既定値)を指定するとアクセス時にDBNullであ
れば例外をスロー
 (Null) を指定するとDBNullであればnull (VBでは Nothing)を返す
 (Empty)を指定するとDBNullであればString.Emptyを返す。ただし、
文字例の場合のみ指定可能。
 その他の値を指定するとDBNullであればその値が返される。
 NullValueの利用上の注意
 NullValueは型付DataSetで作成されたプログラム上で実現されて
いる機能であり、あくまでも型付DataSetのクラスの生成されたプ
ロパティをアクセスした場合にのみ有効であることに注意
 ○ typedTable(0).pub_name
 × table.Rows(0)(“pub_name”) ← DBNullが返える
http://biki.jp.net/enterprisenet
参考
デザイナで指定可能なカラムのプロパティ
http://biki.jp.net/enterprisenet
DBNullの判断と設定
'' DBNull判定
If table.Rows(0).IsNull("pub_name") Then
...
End If
'' DBNull設定
table.Rows(0)("pub_name") = System.Convert.DBNull
'' DBNull判定
If typedTable(0).Ispub_nameNull() Then
...
End If
'' DBNull設定
typedTable(0).Setpub_nameNull()
型付DataSet
DataSet
http://biki.jp.net/enterprisenet
DBNullの判断と設定
//DBNull判定
if (table.Rows[0].IsNull("pub_name"))
{
}
//DBNull設定
table.Rows[0]["pub_name"] = System.Convert.DBNull;
//DBNull判定
if (typedTable[0].Ispub_nameNull())
{
}
//DBNull設定
typedTable[0].Setpub_nameNull();
型付DataSet
DataSet
http://biki.jp.net/enterprisenet
データセットのデータの検証
 DataSet自体にデータの有効性の確認を組み込むことが
できる。主な組み込み方法としては以下の3つ。
 制約を利用したデータ検証
 キー制約や一意の制約などをデータセットの実際のスキーマ定
義の一部として作成する
 DataColumnのプロパティの設定
 MaxLength、AllowDBNull、Unique など、DataColumn オブジェクト
のプロパティを設定する
 変更イベントのハンドリング
 列および行の変更イベント中にデータをチェックできるアプリケー
ション固有の検証を作成する
DataGrid(Windowsフォーム)などのデータセットの更新がUIで
直接実行される場合に利用されることが多い
http://biki.jp.net/enterprisenet
データセットのデータの検証
制約を利用したデータ検証
 主キー
 NULL でない一意な値を持つ列(1つ以上)として定義することが
できる。
 デザイナで「新しいキー」を追加することで定義することが可能。
 一意キー(UniqueConstraint)
 NULL 値を許可する、一意な値を持つ列(1つ以上)として定義す
ることができる。
 デザイナで「新しいキー」を追加する
ことで定義することが可能。1テーブル
複数個作成可能。主キーは1つのみ。
http://biki.jp.net/enterprisenet
データセットのデータの検証
制約を利用したデータ検証
 キー参照(ForeignKeyConstraint)
 データベースの外部キーと似たもので、関連付けられているテー
ブルの更新や追加、削除を制限することができる。
 例えば、子供を持つ親レコードの削除の禁止。
 デザイナでリレーションを作成して外部キー制約を利用することで可能。
DeleteRuleやUpdateRule プロパティで動作を変更することが可能。
http://biki.jp.net/enterprisenet
データセットのデータの検証
DataColumnのプロパティの設定
 MaxLength
 文字単位で表した列の最大長。列に最大長がない場合の値は -1 (既
定)
 AllowDBNull
 null 値を格納できる場合は true(既定値)
 Unique
 値が一意である必要がある場合は true 。既定値はfalse
 DataSetデザイナで指定する場合は該当列をキーとして設定するとtrue
に設定される
http://biki.jp.net/enterprisenet
データセットのデータの検証
制約の一時的な無効化
 DataSet.EnforceConstraints プロパティ
 DataSet更新処理で制約を有効/無効するプロパティ
 trueの場合に自動的に制約のチェックが行われる
 falseの場合は制約のチェックは行われない
 falseからtrueに設定した場合、全ての制約のチェックが行われ、制約に違反し
ていると例外が発生する
 DataTableのConstrains制約、DataColumnの制約に対して影響
 キー参照が設定されているDataSetに対して、制約を一時的
に無効化してテーブルからデータを読み出す例
ds.EnforceConstraints = False
daCustomers.Fill(ds)
daOrders.Fill(ds)
ds.EnforceConstraints = True
ds.EnforceConstraints = false;
daCustomers.Fill(ds);
daOrders.Fill(ds);
ds.EnforceConstraints = true;
http://biki.jp.net/enterprisenet
データセットのデータの検証
変更イベントのハンドリング
 ColumnChanging イベント
 特定の列の変更を検証する場合に利用。
 列の変更直後にエラーを検出することが必要な場合は、
ColumnChanging イベントを使って検証。
 RowChanging イベント
 変更が行のどこかで発生していることを通知。
 一度に複数のエラーを検出する場合 RowChanging イベントを利
用。特に、1 つの列の値が別の列の内容に基づいて検証される
ような方法でデータが構築されている場合は、RowChanging イベ
ント中に検証を実行する必要がある。
 一時的に制約を中断する目的でDataRowのBeginEdit メソッドを
利用すると、各列がそれぞれ変更された後のRowChanging イベ
ントおよび RowChanged イベントをオフにすることができる。
EndEdit メソッドが呼び出されるまで発生しない。
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
http://biki.jp.net/enterprisenet
データセットのデータの検証
変更イベントのハンドリング
private void table_ColumnChanging(
object sender, DataColumnChangeEventArgs e)
{
//発生したカラム名の確認
if (e.Column.ColumnName == "pub_name")
{
string newValue = (string)(e.ProposedValue);
if (newValue.Trim().Length > 10)
{
MessageBox.Show("10文字以下で入力してください","入力エラー");
throw new ApplicationException("10文字以下で入力してください");
}
}
}
http://biki.jp.net/enterprisenet
DataSet Tips
DataSetの検索メソッドの利用について
 主キーで検索する場合
 DataRowCollection.Findメソッドを利用(DataTable.Rows.Findのこと)
 DataTableには主キーで検索インデックスが生成される
 任意の項目・特定バージョンの検索
 DataTable.Selectメソッドが利用できる。ただし、Selectメソッドは複雑な検
索が可能な反面オーバーベッドも大きいため、同じ項目を何度も等号検
索する処理にはDataViewを作成・利用した検索を行うようにする。
 DataViewを利用した検索
 DataViewのSortカラムに指定した項目にたいしてFindおよびFindRowsメ
ソッドで検索が可能です。(検索インデックスが生成され利用される)
 DataViewの検索インデックスはSort、RowFilter 、RowStateFilter プロパ
ティを変更するごとに再作成されるためコンストラクタで必要な値を全て
指定するようにする。
 RowStateFilterを利用した検索も可能だが検索インデックスが再作成され
るためオーバーヘッドが大きくなる。DataGridなどでのフィルタ処理に利
用する。
http://biki.jp.net/enterprisenet
DataSet Tips
DataSetでの検索時の大文字・小文字の区別
 SelectやFindメソッドなどはDataTableやDataSetの
CaseSensitiveによって区別する/しないが変化する。既
定値ではfalseのため大文字/小文字の区別をしない。
 ユニークキーのチェックも同様の影響を受ける
 型付DataSetに対してはデザイナで設定すること
が可能。
http://biki.jp.net/enterprisenet
DataSet Tips
Partial Classの利用
 Partial クラスとは
 1つのクラスのソースコードを複数のファイルに分散して記述するこ
とができるコンパイラの仕組み
 Partialクラスを利用することで型付DataSetに新しいプロパティ
やメソッドを追加することできる
 DataRow(テーブル名Row)クラスにプロパティを追加すると、データカ
ラムのように利用することが可能
 ただし、あくまでも型付DataSetに追加するものなので、非型付
DataSetからは利用できない
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
http://biki.jp.net/enterprisenet
DataSet Tips
シリアライズ
 シリアライズの2つのパターン
 XMLシリアライズ(XmlSerializerを利用したシリアライズ)
 Diffgram形式
 DiffGram は、データ要素の現在のバージョンと元のバージョンを識別する
XML 形式です。行エラー情報、行順序などの情報も含まれています。
 Binaryシリアライズ( BinaryFormatterを利用したシリアライズ)
 RemotingFormatを設定することで出力形式を変えることが可能
 下位互換のためXml形式が規定値。バイナリ形式で出力するために
は明示的にSerializationFormat. Binaryを指定する必要がある
 シリアライズの高速化
 データが多くなるとBinaryシリアライズの方が高速
 SchemaSerializationModeをExcludeSchemaにするとスキーマ
情報がシリアライズされないため高速

Más contenido relacionado

Similar a エンタープライズ.Net DataSet

PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017Shigeru Hanada
 
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaPostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaShigeru Hanada
 
Erlang Web
Erlang WebErlang Web
Erlang WebNgoc Dao
 
データベースのお話
データベースのお話データベースのお話
データベースのお話Hidekazu Tanaka
 
SAP Application(DB)のソースエンドポイントとしての利用
SAP Application(DB)のソースエンドポイントとしての利用SAP Application(DB)のソースエンドポイントとしての利用
SAP Application(DB)のソースエンドポイントとしての利用QlikPresalesJapan
 
MySQLの公式GUIツール MySQL Workbench
MySQLの公式GUIツール MySQL WorkbenchMySQLの公式GUIツール MySQL Workbench
MySQLの公式GUIツール MySQL Workbenchyoyamasaki
 
20200617 AWS Black Belt Online Seminar Amazon Athena
20200617 AWS Black Belt Online Seminar Amazon Athena20200617 AWS Black Belt Online Seminar Amazon Athena
20200617 AWS Black Belt Online Seminar Amazon AthenaAmazon Web Services Japan
 
Webで役立つRDBの使い方
Webで役立つRDBの使い方Webで役立つRDBの使い方
Webで役立つRDBの使い方Soudai Sone
 
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014Shigeru Hanada
 
データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)
データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)
データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)Kenta Oku
 
Ts76→ts79 spotfire追加機能ご紹介 170802
Ts76→ts79 spotfire追加機能ご紹介 170802Ts76→ts79 spotfire追加機能ご紹介 170802
Ts76→ts79 spotfire追加機能ご紹介 170802TAKESHI KIURA
 
Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門Keisuke Fujikawa
 
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fallビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo FallYusukeKuramata
 
Tableau Desktop データ準備の新機能: ユニオン、ピボット、データインタープリタ、など
Tableau Desktop データ準備の新機能: ユニオン、ピボット、データインタープリタ、などTableau Desktop データ準備の新機能: ユニオン、ピボット、データインタープリタ、など
Tableau Desktop データ準備の新機能: ユニオン、ピボット、データインタープリタ、などRyusuke Ashiya
 
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門Koichi Hamada
 

Similar a エンタープライズ.Net DataSet (20)

PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017
 
SQL Server 入門
SQL Server 入門SQL Server 入門
SQL Server 入門
 
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaPostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
 
Erlang Web
Erlang WebErlang Web
Erlang Web
 
データベースのお話
データベースのお話データベースのお話
データベースのお話
 
Dynamic Data
Dynamic DataDynamic Data
Dynamic Data
 
SAP Application(DB)のソースエンドポイントとしての利用
SAP Application(DB)のソースエンドポイントとしての利用SAP Application(DB)のソースエンドポイントとしての利用
SAP Application(DB)のソースエンドポイントとしての利用
 
MySQLの公式GUIツール MySQL Workbench
MySQLの公式GUIツール MySQL WorkbenchMySQLの公式GUIツール MySQL Workbench
MySQLの公式GUIツール MySQL Workbench
 
20091207
2009120720091207
20091207
 
20110607
2011060720110607
20110607
 
20200617 AWS Black Belt Online Seminar Amazon Athena
20200617 AWS Black Belt Online Seminar Amazon Athena20200617 AWS Black Belt Online Seminar Amazon Athena
20200617 AWS Black Belt Online Seminar Amazon Athena
 
Mvc conf session_4_ono
Mvc conf session_4_onoMvc conf session_4_ono
Mvc conf session_4_ono
 
Webで役立つRDBの使い方
Webで役立つRDBの使い方Webで役立つRDBの使い方
Webで役立つRDBの使い方
 
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
 
データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)
データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)
データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)
 
Ts76→ts79 spotfire追加機能ご紹介 170802
Ts76→ts79 spotfire追加機能ご紹介 170802Ts76→ts79 spotfire追加機能ご紹介 170802
Ts76→ts79 spotfire追加機能ご紹介 170802
 
Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門
 
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fallビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
 
Tableau Desktop データ準備の新機能: ユニオン、ピボット、データインタープリタ、など
Tableau Desktop データ準備の新機能: ユニオン、ピボット、データインタープリタ、などTableau Desktop データ準備の新機能: ユニオン、ピボット、データインタープリタ、など
Tableau Desktop データ準備の新機能: ユニオン、ピボット、データインタープリタ、など
 
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
 

Más de Akihiro Ehara

Visual Studio TypeScript npm WebPack
Visual Studio TypeScript npm WebPackVisual Studio TypeScript npm WebPack
Visual Studio TypeScript npm WebPackAkihiro Ehara
 
Share point開発 ファイル受信
Share point開発 ファイル受信Share point開発 ファイル受信
Share point開発 ファイル受信Akihiro Ehara
 
SharePoint Onlineアクセスモニター
SharePoint OnlineアクセスモニターSharePoint Onlineアクセスモニター
SharePoint OnlineアクセスモニターAkihiro Ehara
 
Google アナリティクスで SharePointの利用状況を確認する
Google アナリティクスでSharePointの利用状況を確認するGoogle アナリティクスでSharePointの利用状況を確認する
Google アナリティクスで SharePointの利用状況を確認するAkihiro Ehara
 
SharePointアドイン開発 SAPデータ連携
SharePointアドイン開発 SAPデータ連携SharePointアドイン開発 SAPデータ連携
SharePointアドイン開発 SAPデータ連携Akihiro Ehara
 
SharePointアドイン開発 Line風Chat アドイン
SharePointアドイン開発 Line風Chat アドインSharePointアドイン開発 Line風Chat アドイン
SharePointアドイン開発 Line風Chat アドインAkihiro Ehara
 
エンタープライズ.Net light switch
エンタープライズ.Net light switchエンタープライズ.Net light switch
エンタープライズ.Net light switchAkihiro Ehara
 
エンタープライズ.Net RIAサービス
エンタープライズ.Net RIAサービスエンタープライズ.Net RIAサービス
エンタープライズ.Net RIAサービスAkihiro Ehara
 
エンタープライズ.Net RIAサービス
エンタープライズ.Net RIAサービスエンタープライズ.Net RIAサービス
エンタープライズ.Net RIAサービスAkihiro Ehara
 
エンタープライズ.Net 詳細設計編
エンタープライズ.Net 詳細設計編エンタープライズ.Net 詳細設計編
エンタープライズ.Net 詳細設計編Akihiro Ehara
 

Más de Akihiro Ehara (11)

Visual Studio TypeScript npm WebPack
Visual Studio TypeScript npm WebPackVisual Studio TypeScript npm WebPack
Visual Studio TypeScript npm WebPack
 
Share point開発 ファイル受信
Share point開発 ファイル受信Share point開発 ファイル受信
Share point開発 ファイル受信
 
SharePoint Onlineアクセスモニター
SharePoint OnlineアクセスモニターSharePoint Onlineアクセスモニター
SharePoint Onlineアクセスモニター
 
Google アナリティクスで SharePointの利用状況を確認する
Google アナリティクスでSharePointの利用状況を確認するGoogle アナリティクスでSharePointの利用状況を確認する
Google アナリティクスで SharePointの利用状況を確認する
 
SharePointアドイン開発 SAPデータ連携
SharePointアドイン開発 SAPデータ連携SharePointアドイン開発 SAPデータ連携
SharePointアドイン開発 SAPデータ連携
 
SharePointアドイン開発 Line風Chat アドイン
SharePointアドイン開発 Line風Chat アドインSharePointアドイン開発 Line風Chat アドイン
SharePointアドイン開発 Line風Chat アドイン
 
Cloud storage light
Cloud storage lightCloud storage light
Cloud storage light
 
エンタープライズ.Net light switch
エンタープライズ.Net light switchエンタープライズ.Net light switch
エンタープライズ.Net light switch
 
エンタープライズ.Net RIAサービス
エンタープライズ.Net RIAサービスエンタープライズ.Net RIAサービス
エンタープライズ.Net RIAサービス
 
エンタープライズ.Net RIAサービス
エンタープライズ.Net RIAサービスエンタープライズ.Net RIAサービス
エンタープライズ.Net RIAサービス
 
エンタープライズ.Net 詳細設計編
エンタープライズ.Net 詳細設計編エンタープライズ.Net 詳細設計編
エンタープライズ.Net 詳細設計編
 

Último

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 

Último (10)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 

エンタープライズ.Net DataSet