データベースアクセス技術 ADO.NET 2.0 開発者カテゴリ ◆NOTES◆ PowerPoint のノート部分には、講師がセミナーを進める上での留意点を記載しています。 また、ノート部分の「◆90分ダイジェスト vs 半日コース」という欄には、今回の 90分ダイジェストコースと、このコースの元になった半日コースとの、おおよその差分が記述してあります。 この差分記述は、90分コースでのだいたいの深さの目安として掲載したものであって、実際の講習では、厳密にこの記載に基づいて、講習範囲を限定する必要はないでしょう。もし、90分コースを開いた際に、時間が余った場合は、この差分の部分を追加説明するなど、補足説明の指針にすればよいと思います。
アジェンダ ADO.NET の基本的なオブジェクト Visual Studio 2005 でのビジュアルな ADO.NET の実装
ADO.NET とは ? ADO.NETとは? 実装形態の選択肢 .NET Frameworkで提供されるデータアクセスのためのクラスライブラリ 汎用プログラミングインターフェイス 実装形態の選択肢 接続型 データ操作中は接続を維持 クライアント データベース サーバー Windowsフォーム 接続 DataSet データ層 非接続型 データ操作中は接続を一旦切断
ADO.NET の特徴 ADO.NETの特徴 非接続データセットのサポート (スケーラビリティ) XMLデータのサポート (汎用性) Web フォーム XML Webサービス DataSet DataSet ブラウザ XML ビジネス層 (中間層) データ層 Windows フォーム DataSet 異種プラットフォーム
ADO.NET オブジェクト モデル 1/2 DataAdapter DataSet DataReader 非接続型データキャッシュ DataReader 接続型レコードセット Forward only / Read only クライアント 非接続型 DataSet DataTable 接続型 (Instructor's notes) これ以降の目的は、今後 ADO.NET を調べる上で円滑に進むよう、代表的なオブジェクトの位置づけや特徴を理解することです。 DataAdapter DataReader データソース Command Connection
ADO.NET オブジェクト モデル 2/2 DataSet の構造 DataSet DataTable DataTable DataRelation DataRelation DataRow DataTable DataTable DataRow DataRow DataRow DataTable ~ DataAdapter DataAdapter DataAdapter
.NET Framework データ プロバイダ データ ソースにアクセスするためのクラスのセット データ プロバイダの種類 .NET Framework Data Provider for SQL Server SQL Server 7.0 以降 .NET Framework Data Provider for Oracle Oracle Client 8.1.7 以降 .NET Framework Data Provider for OLE DB SQL Server 6.5、Access、あらゆる OLE DB データ ソース .NET Framework Data Provider for ODBC レガシ データ その他
基本的な接続と参照 1/2 Connection/Commandを直接使う ExecuteQuery メソッド、DataReader を使って操作 VB.NET Sub Main() Dim cn As New OleDbConnection() Dim cmd As New OleDbCommand() Dim dr As OleDbDataReader cn.ConnectionString = strCn '接続文字列 cn.Open() cmd.Connection = cn cmd.CommandText = "SELECT title FROM titles" dr = cmd.ExecuteReader() While dr.Read() s = dr.GetString(0) s = CStr( dr("title") ) End While dr.Close() cn.Close() End Sub (Instructor's notes) ◆90分ダイジェスト vs 半日コース 代表的なオブジェクトの感触をつかんでもうらために、Connection、Command、DataAdapter、DataSet の基本的なコードを紹介します。 半日コースでは、パラメータ付きクエリ、ストアドプロシージャ、トランザクション、フィルタ、並び替えなどのバリエーションも紹介しています。
基本的な接続と参照 2/2 Connection/Commandを直接使う ExecuteQuery メソッド、DataReader を使って操作 C# static void Main(string[] args) { OleDbConnection cn = new OleDbConnection(); OleDbCommand cmd = new OleDbCommand(); OleDbDataReader dr; cn.ConnectionString = strCn; //接続文字列 cn.Open(); cmd.Connection = cn; cmd.CommandText = "SELECT title FROM titles"; dr = cmd.ExecuteReader(); while( dr.Read() ) { s = dr.GetString(0); s = (string) dr["title"]; } dr.Close(); cn.Close();
基本的な接続と更新 1/2 Connection/Commandを直接使う ExecuteNonQuery メソッド VB.NET Sub Main() Dim cn As New OleDbConnection() Dim cmd As New OleDbCommand() cn.ConnectionString = strCn cn.Open() cmd.Connection = cn cmd.CommandText = "UPDATE titles SET price = price + 1 " + _ "WHERE title_id = 'BU1111'" 'SQL文の実行 cmd.ExecuteNonQuery() cn.Close() End Sub
基本的な接続と更新 2/2 Connection/Commandを直接使う ExecuteNonQuery メソッド C# static void Main(string[] args) { OleDbConnection cn = new OleDbConnection(); OleDbCommand cmd = new OleDbCommand(); cn.ConnectionString = strCn; cn.Open(); cmd.Connection = cn; cmd.CommandText = "UPDATE titles SET price = price + 1 " + "WHERE title_id = 'BU1111'"; //SQL文の実行 cmd.ExecuteNonQuery(); cn.Close(); }
データセットへの読み込み 1/2 DataAdapter による伝播 データソース → DataAdapter → DataSet VB.NET Sub Main() Dim ds As New DataSet() Dim adapter As New OleDbDataAdapter( _ "SELECT * FROM titles", _ "provider=SQLOLEDB;data source=(local);" + _ "user id=sa;password=;initial catalog=pubs") 'データソース → DataAdapter → DataSet adapter.Fill(ds, "titles") '各行を走査 Dim row As DataRow For Each row In ds.Tables("titles").Rows Console.WriteLine( row("title").ToString() ) Next row End Sub
データセットへの読み込み 2/2 DataAdapter による伝播 データソース → DataAdapter → DataSet C# static void Main(string[] args) { DataSet ds = new DataSet(); OleDbDataAdapter adapter = new OleDbDataAdapter ("SELECT * FROM titles", "provider=SQLOLEDB;data source=(local);" + "user id=sa;password=;initial catalog=pubs"); //データソース → DataAdapter → DataSet adapter.Fill(ds, "titles"); //各行を走査 foreach(DataRow row in ds.Tables["titles"].Rows) Console.WriteLine( row["title"].ToString() ); }
データセットからの更新 1/2 DataAdapter による伝播 データソース ← DataAdapter ← DataSet VB.NET Sub Main() Dim ds As New DataSet() Dim adapter As New OleDbDataAdapter( _ "SELECT * FROM titles", _ "provider=SQLOLEDB;data source=(local);" + _ "user id=sa;password=;initial catalog=pubs") Dim builder As New OleDbCommandBuilder(adapter) 'データソース → DataAdapter → DataSet adapter.Fill(ds, "titles") 'データセットのデータを更新 ds.Tables("titles").Rows(0)("title") = ".NET Products" 'データソース ← DataAdapter ← DataSet adapter.Update(ds, "titles") End Sub
データセットからの更新 2/2 DataAdapter による伝播 データソース ← DataAdapter ← DataSet C# static void Main(string[] args) { DataSet ds = new DataSet(); OleDbDataAdapter adapter = new OleDbDataAdapter ("SELECT * FROM titles", "provider=SQLOLEDB;data source=(local);" + "user id=sa;password=;initial catalog=pubs"); OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter); //データソース → DataAdapter → DataSet adapter.Fill(ds, "titles"); //データセットのデータを変更 ds.Tables["titles"].Rows[0]["title"] = ".NET Products"; //データソース ← DataAdapter ← DataSet adapter.Update(ds, "titles"); }
アジェンダ ADO.NET の基本的なオブジェクト ADO.NET を使用したデータ操作 Visual Studio 2005 でのビジュアルな ADO.NET の実装
データ ソース構成ウィザード TableAdapter DataSet Windowsフォーム データベース サーバー ★ ★ クライアント (Instructor's notes) これ以降の主な目的は、ADO.NET を使ったデータ連結に関して、Visual Studio でのビジュアルな操作によって、コードが自動生成されることを体感することです。 データベース サーバー ★ TableAdapter ★ DataSet クライアント データ層
データ ソース ウィンドウ 1/2 ゼータセット構造のビュー データ連結の簡素化 ドラッグ アンド ドロップによる指定 コントロールの種類を指定できる
データ ソース ウィンドウ 2/2 BindingSource を介したデータ連結 BindingNavigator データを表示する ユーザー インターフェイス (カレント レコードを反映) Windowsフォーム ★ カレント レコードの移動等を 行うユーザー インターフェイス ★ BindingNavigator カレント レコードの管理 データの提供 ★ BindingSource データベース サーバー TableAdapter DataSet クライアント データ層
データセット デザイナ 型指定されたデータセットのデザイン ツール 直接の編集対象は .xsd ファイル 型指定されたデータセットと TableAdapter の編集 型指定されたデータセットを作るには データ ソース ウィンドウから データ ソースを追加するとき、 「データベース」 か 「Web サービス」を選択 [プロジェクト] - [新しい項目の追加] から、「データ セット」を選択