17
実践データベースプロ グラミング入門講座 Window ADO.NET C# & VB Visual Studio 2008 / 2010 実践データベースプログラミングを短期間で習得。同時に DataSet, DataBinding, DataGridView のメカニズムを学び、応用 プログラムを作るための基礎を身に付ける教材です。 ©2011-2012 丸山プログラミング塾

実践データベースプロ グラミング入門講座moeprog.web.fc2.com/M_NET_SC/Manual/PayPal100/... · 実践データベースプロ グラミング入門講座 Window ADO.NET

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 実践データベースプロ グラミング入門講座moeprog.web.fc2.com/M_NET_SC/Manual/PayPal100/... · 実践データベースプロ グラミング入門講座 Window ADO.NET

実践データベースプロ

グラミング入門講座 Window ADO.NET C# & VB

Visual Studio 2008 / 2010

実践データベースプログラミングを短期間で習得。同時に

DataSet, DataBinding, DataGridView のメカニズムを学び、応用

プログラムを作るための基礎を身に付ける教材です。

©2011-2012 丸山プログラミング塾

Page 2: 実践データベースプロ グラミング入門講座moeprog.web.fc2.com/M_NET_SC/Manual/PayPal100/... · 実践データベースプロ グラミング入門講座 Window ADO.NET

実践データベースプログラミング入門講座

©2011-2012 Maruyama Programming School pg. 2

【著作権について】

本レポート及びソフトウェアは著作権法で保護されている著作物です。

下記の点にご注意戴きご利用下さい。

▼本レポートの著作権は丸山プログラミング塾に属します。

著作権者の許可なく、このレポートの全部又は一部をいかなる手段においても複製、転載、流用、転売等することを

禁じます。

このレポートの開封をもって下記の事項に同意したものとみなします。

このレポートは秘匿性が高いものであるため、著作権者の許可なく、このレポートの全部又は一部をいかなる手段に

おいても複製、転載、流用、転売等することを禁じます。

著作権等違反の行為を行った時、その他不法行為に該当する行為を行った時は、関係法規に基づき損害賠償請求を行

う等、民事・刑事を問わず法的手段による解決を行う場合があります。

このレポートに書かれた情報は、作成時点での著者の見解等です。著者は事前許可を得ずに誤りの訂正、情報の最新

化、見解の変更等を行う権利を有します。

このレポートの作成には万全を期しておりますが、万一誤り、不正確な情報等がありましても、著者・パートナー等

の業務提携者は、一切の責任を負わないことをご了承願います。

このレポートを利用することにより生じたいかなる結果につきましても、著者・パートナー等の業務提携者は、一切

の責任を負わないことをご了承願います。

▼著作権者の丸山プログラミング塾の許可を得ずに、本レポートの全部や一部を、印刷物、PDF、電子デ

ータ、ビデオ、インターネットなど、どの場合の伝達手段によっても複製、転載する事を禁じます。

▼本レポート(PDF ファイル、または PDF ファイルを印刷したもの)を開封、または印刷する事により、

あなたは、私、丸山プログラミング塾と、以下の契約に同意したとみなします。契約に同意できない場合

は、丸山プログラミング塾にその旨を通知し、本レポートの返却と削除を求めます。

■一般公開の禁止

本レポートを、あらゆる出版、メディア、インターネットで配付、複製、一般公開、販売をする事を禁じ

ます。

Page 3: 実践データベースプロ グラミング入門講座moeprog.web.fc2.com/M_NET_SC/Manual/PayPal100/... · 実践データベースプロ グラミング入門講座 Window ADO.NET

実践データベースプログラミング入門講座

©2011-2012 Maruyama Programming School pg. 3

内容

1 はじめに ···················································································································· 9

1.1 自動生成されたコードで学ぶ ADO.NET ········································································· 9

2 演習1 Wizard で DB 参照プログラムを作る ···································································· 10

2.1 大まかな流れ ··········································································································· 11

2.2 Wizard で DataSet を自動生成する手順 ············································································ 11

2.2.1 データソース構成ウィザード ················································································ 12

2.2.2 データセットの確認 ···························································································· 17

2.3 DataSet とコントロールの自動連携(バインディング)方法 ··············································· 19

2.3.1 テキストボックス コントロールのデータバインディング ··········································· 19

2.3.2 以下同様に TextBoxと DataSetをバインドします。 ····················································· 21

2.3.3 BindingNavigator の BindingSource 設定 ······································································ 22

2.3.4 各コンボボックスコントロールにマスターをデータ バインドします ···························· 23

2.3.5 DataGridViewコントロールに注文詳細テーブルをデータバインドします ························ 27

2.4 自動生成されたソースコードを見てみよう ···································································· 28

2.5 プログラムを実行してみよう ······················································································ 29

3 座学1 SampleDB のテーブル構造について ···································································· 30

3.1 「Null を許容」について ···························································································· 30

3.2 自動インクリメント機能(ACCESS のオートナンバー型) ··············································· 30

3.3 SampleDB テーブルの定義 ···························································································· 31

3.3.1 注文テーブル ····································································································· 31

3.3.2 注文詳細テーブル ······························································································· 31

3.3.3 従業員マスター ·································································································· 32

3.3.4 店マスター ········································································································ 32

Page 4: 実践データベースプロ グラミング入門講座moeprog.web.fc2.com/M_NET_SC/Manual/PayPal100/... · 実践データベースプロ グラミング入門講座 Window ADO.NET

実践データベースプログラミング入門講座

©2011-2012 Maruyama Programming School pg. 4

3.3.5 メニューマスター ······························································································· 32

3.3.6 SampleDBデータベースのリレーションシップ ·························································· 33

4 演習2 ComboBox と TextBox を連携する方法 ································································ 34

4.1 Form の初期化処理対策······························································································· 34

4.2 ComboBox と TextBox の同期方法 ···················································································· 35

4.2.1 TextBox→ComboBox ····························································································· 35

4.2.2 ComboBoxの変更で TextBoxを編集する ··································································· 37

4.3 店名に応じたメニューリストにする方法(フィルターで抽出) ········································· 38

4.3.1 フィルターのタイミング ······················································································ 39

4.4 Designer ソースファイルを見てみよう ············································································ 40

4.4.1 大分類すると5つの構成 ······················································································ 40

4.4.2 データベース関連のコンポーネント、コントロール ··················································· 43

5 演習3 編集内容をデータベースに更新してみよう ··························································· 46

5.1 DataGridView の各種プロパティ設定 ·············································································· 47

5.1.1 データバインド列の削除と列名称の変更 ·································································· 48

5.1.2 非バインド列の追加 ···························································································· 49

5.2 TextBox のデータバインディングの設定変更 ··································································· 50

5.3 データテーブルの更新結果をデータベースへ送信 ··························································· 51

5.3.1 現在位置の保存と反映 (①) ··············································································· 52

5.3.2 現在行の編集終了 (②) ····················································································· 52

5.3.3 データテーブル未編集項目処理 (③) ··································································· 52

5.3.4 データテーブルをデータベースへ送信 (④) ·························································· 53

5.3.5 データベースよりデータテーブルへ読み込む (⑤) ················································· 53

5.3.6 小計計算と DataGridView へ反映 (⑥) ·································································· 53

Page 5: 実践データベースプロ グラミング入門講座moeprog.web.fc2.com/M_NET_SC/Manual/PayPal100/... · 実践データベースプロ グラミング入門講座 Window ADO.NET

実践データベースプログラミング入門講座

©2011-2012 Maruyama Programming School pg. 5

5.4 小計計算結果と DataGridView への表示··········································································· 54

6 演習4 mdbファイルを ODBC 接続する方法 ······························································· 55

6.1 ODBC 接続とは ········································································································ 55

6.2 ODBC データソースとは ···························································································· 55

6.3 ODBC データソース設定(演習) ················································································ 55

6.3.1 ODBC設定の一括表示 ························································································· 56

6.3.2 ODBC設定(詳細) ···························································································· 56

6.4 ODBC 版データセット(Dataset)作成 ··········································································· 58

6.4.1 接続の追加 ········································································································ 58

6.4.2 接続文字列名 ····································································································· 59

6.4.3 データセット内に指定するデータベースオブジェクト ················································ 60

6.4.4 SampleDBDataSet.xsd の作成 ··················································································· 60

7 演習5 SQL Server(Express)と接続してみよう ····························································· 61

7.1 事前準備 ················································································································· 61

7.2 MDB ファイルデータを SQL Server へインポート ······························································ 61

7.3 インポート結果の確認 ······························································································· 65

7.3.1 SQL Serverを接続します ······················································································· 65

7.3.2 MDBファイルを接続します ·················································································· 67

7.3.3 Visual Studioでテーブルの内容を確認する ································································ 68

7.4 SQL Server 版のデータセット作成 ·················································································· 70

7.4.1 接続の追加-データソースの変更 ·········································································· 70

7.4.2 接続の追加 ········································································································ 71

7.4.3 接続文字列名 ····································································································· 72

7.4.4 データセット内に指定するデータベースオブジェクト ················································ 72

Page 6: 実践データベースプロ グラミング入門講座moeprog.web.fc2.com/M_NET_SC/Manual/PayPal100/... · 実践データベースプロ グラミング入門講座 Window ADO.NET

実践データベースプログラミング入門講座

©2011-2012 Maruyama Programming School pg. 6

7.4.5 SampleDBDataSet.xsd の作成 ··················································································· 72

8 応用データベースアプリケーションの解説 ······································································· 73

8.1 画面······················································································································· 73

8.1.1 DataGridViewのセルを ComboBox に変更する(実験) ················································ 74

8.1.2 DataGridViewのセルを動的に TextBoxと ComboBox に切り換える ·································· 75

8.1.3 「追加・更新」後の画面 ······················································································ 76

8.2 公開プロパティとコンストラクタ ················································································ 77

8.2.1 フィールド ········································································································ 77

8.2.2 メソッド ··········································································································· 77

8.2.3 Formイベントハンドラ ························································································ 77

8.2.4 DataGridViewイベントハンドラ ·············································································· 77

8.2.5 内部メソッド ····································································································· 77

8.3 Form イベントハンドラの処理概要 ················································································ 78

8.3.1 frmOrderDetail_Load(Loadイベント) ····································································· 78

8.3.2 frmOrderDetail_Shown(Shownイベント) ································································· 78

8.3.3 button1_Click(閉じる) ························································································ 78

8.3.4 button2_Click(追加・削除・更新) ········································································· 78

8.4 DataGridView 関連のイベントハンドラの処理概要 ···························································· 79

8.4.1 dataGridView1_DataError(DataGridViewのエラーメッセージを回避する) ······················· 79

8.4.2 dataGridView1_EditingControlShowing(編集中のコントロールの初期化) ························· 79

8.4.3 dataGridView1_CellBeginEdit(セル編集の開始) ························································· 79

8.4.4 dataGridView1_CellEndEdit(セル編集の終了) ··························································· 79

8.4.5 dataGridView1_CellEnter ························································································· 79

8.4.6 DataGridView-ComboBox イベント ········································································· 79

8.4.7 shopComboBox_SelectedIndexChanged ········································································ 80

8.4.8 menuComboBox_SelectedIndexChanged ······································································· 80

Page 7: 実践データベースプロ グラミング入門講座moeprog.web.fc2.com/M_NET_SC/Manual/PayPal100/... · 実践データベースプロ グラミング入門講座 Window ADO.NET

実践データベースプログラミング入門講座

©2011-2012 Maruyama Programming School pg. 7

8.5 内部処理 ················································································································· 81

8.5.1 小計計算(Grossメソッド) ·················································································· 81

8.5.2 SampleDBDataSet.Designer.Add.cs ·············································································· 81

8.6 自作コード量が少ない理由 ························································································· 81

9 オンメモリデータベース ······························································································ 82

9.1 DataSet ファイルを作成 ······························································································ 82

9.2 データセットにデータ テーブルを追加する ·································································· 82

9.3 テーブル名を変更する ······························································································· 82

9.4 テーブルに列を追加する ···························································································· 83

9.5 主キーを設定する ····································································································· 84

9.6 項目のプロパティ設定 ······························································································· 84

9.6.1 DataTypeの設定 ·································································································· 85

9.7 DataTable の活用 ········································································································ 86

9.7.1 フィルター(絞り込み、抽出) ············································································· 86

10 DataAdapter に FillBy メソッド(クエリ)を追加する方法 ··················································· 88

10.1 「TableAdapter クエリの構成ウィザード」の実行 ··························································· 88

10.2 コマンドの種類を選択します ··················································································· 88

10.3 クエリの種類の選択 ······························································································· 89

10.4 SQL Select ステートメントの指定 ················································································ 89

10.5 生成するメソッドを選択 ························································································· 90

10.6 ウィザードの結果 ·································································································· 90

10.7 ウィザードの確認 ·································································································· 91

11 DataSet のカストマイズ ································································································ 92

11.1 プロパティの変更手順 ···························································································· 92

Page 8: 実践データベースプロ グラミング入門講座moeprog.web.fc2.com/M_NET_SC/Manual/PayPal100/... · 実践データベースプロ グラミング入門講座 Window ADO.NET

実践データベースプログラミング入門講座

©2011-2012 Maruyama Programming School pg. 8

11.2 構成の追加・変更 ·································································································· 93

11.3 サブメニュー ········································································································ 94

11.3.1 DataSet.xsd のサブメニュー ················································································· 94

11.3.2 DataTableのサブメニュー ··················································································· 97

11.3.3 DataTable列のサブメニュー ··············································································· 100

11.3.4 TableAdapter のサブメニュー ·············································································· 102

11.3.5 TableAdapter メソッドのサブメニュー ·································································· 104

12 ADO.NET DataSet について ························································································· 105

12.1 データベースとの接続 ··························································································· 105

12.2 TableAdapter の概要 ································································································· 106

12.2.1 TableAdapter のメソッドとプロパティ(規定) ······················································ 106

Page 9: 実践データベースプロ グラミング入門講座moeprog.web.fc2.com/M_NET_SC/Manual/PayPal100/... · 実践データベースプロ グラミング入門講座 Window ADO.NET

実践データベースプログラミング入門講座

©2011-2012 Maruyama Programming School pg. 9

1 はじめに

Visual Studio(Express 版も可)があれば、データベースプログラミングの演習がすぐに始められます。解

答用プロジェクトも用意していますので、万が一うまくいかない場合は比較・参照することで問題を自力

解決することができます。

一般的な Windows アプリケーション プログラミング(コントロール操作など)に馴れている人ほど、デ

ータベースプログラミングの罠にはまってしまうかもしれません。データバインドというこれまでになか

った概念とメカニズムを理解しない限り様々な問題をシンプルに解決することは難しくなっています。こ

れを避けると、既存コードで対処しようとがんばってより複雑なコードに向かってしまい、思考錯誤から

抜け出せなくなります。

いいところまで行っても、ある条件やある操作で問題が発覚しそれを解決するために何日も悩んでしまう

こともあります。分かってしまえば、たったの 1行で解決することもあります。

ポイントは、自動生成されたたコード(クラス)の概念やメカニズムを理解することです。

本講座では、デザイナ、ウィザードなどの使い方を詳細に解説し、データベース プログラミングに馴れ

て即実践できるコーディングができることを目指します。

1.1 自動生成されたコードで学ぶ ADO.NET

Visual Studio のデザイナやウィザード機能を使わずに全てをコーディングすることも可能です。が、自動

生成すると、本講座で使用するデータベースの DataSetの場合、コード行数は 4000行を超えています。コ

ントロールのデータバインド機能など使い方を理解することで簡単に作成できます。例えば、単純なデー

タの編集であれば、わずかなコーディングでできてしまいます。更新(追加、変更、削除)も簡単にでき

てしまいます。

データベースとの接続(Microsoft Access OLEDB接続、ODBC接続、SQL Server 接続)の演習

自分でコードを書かない(=コーディングレス)でどこまでできるのか?を体験

自動生成されたコードを理解して利用することで、わずかなコーディングで対応できる演習

構造、メカニズム、役割を理解することでコードを読めるようになります。

※64 ビット版の Windows を使用されている場合、MDB 用(Microsoft Access データベース ファイル)の

プロバイダは標準でセットされていませんのでご注意ください。

Page 10: 実践データベースプロ グラミング入門講座moeprog.web.fc2.com/M_NET_SC/Manual/PayPal100/... · 実践データベースプロ グラミング入門講座 Window ADO.NET

実践データベースプログラミング入門講座

©2011-2012 Maruyama Programming School pg. 10

2 演習1 Wizardで DB参照プログラムを作る

演習用のテンプレートプロジェクトです。基本的なコントロールの設定は済んでいます。ここでは、デー

タベースに関するデザインとコントロールのバインディングを行います。

この演習では、プログラムのコーディングは行いません。

Page 11: 実践データベースプロ グラミング入門講座moeprog.web.fc2.com/M_NET_SC/Manual/PayPal100/... · 実践データベースプロ グラミング入門講座 Window ADO.NET

実践データベースプログラミング入門講座

©2011-2012 Maruyama Programming School pg. 11

2.1 大まかな流れ

データベースとの接続は、任意のフォルダにある MDB ファイル(MS Access)を直接(OleDB)接続しま

す。

2.2 Wizardで DataSet を自動生成する手順

DataSetを作成します(対象のデータベースに対応した独自のクラス)。

Visual Studio のメニュー「データ」-「新しいデータソースの追加」をクリックして

「データソース構成ウィザード」を起動します。

メモ)複数のプロジェクトがある場合、現在選択しているプロジェクトに作成されます。

作成する場合は、対象プロジェクトを選択していることを確認してから行いましょう!

間違った場合は、作成された Datasetを削除して作り直すことになります。

DataSetの作成

•SampleDB-注文詳細データ

•各コントロールのデータバインド

•BindingNavigator

•TextBox

•DataGridView

ComboBoxとのデータバインディング

•各ComboBoxとマスターのデータバインディング

•SampleDB-従業員マスター

•SampleDB-店名マスター

•SampleDB-メニューマスター

Page 12: 実践データベースプロ グラミング入門講座moeprog.web.fc2.com/M_NET_SC/Manual/PayPal100/... · 実践データベースプロ グラミング入門講座 Window ADO.NET

実践データベースプログラミング入門講座

©2011-2012 Maruyama Programming School pg. 12

2.2.1 データソース構成ウィザード

「データソースの種類を選択」

「アプリケーションのデータの取得元」より、

データベースを選択します。

「次へ」をクリックします。

「データ接続の選択」

「アプリケーションがデータベースへの接続

に使用するデータ接続」を設定します。

「新しい接続(C)…」ボタンをクリックします。

Page 13: 実践データベースプロ グラミング入門講座moeprog.web.fc2.com/M_NET_SC/Manual/PayPal100/... · 実践データベースプロ グラミング入門講座 Window ADO.NET

実践データベースプログラミング入門講座

©2011-2012 Maruyama Programming School pg. 13

「接続の追加」

データソースを選択するため、「変更(C)…」ボタンをクリ

ックします。

「データソースの変更」

データソースの一覧から「Microsoft Access デ

ータベース ファイル」を選択します。

「OK」ボタンをクリックします。

Page 14: 実践データベースプロ グラミング入門講座moeprog.web.fc2.com/M_NET_SC/Manual/PayPal100/... · 実践データベースプロ グラミング入門講座 Window ADO.NET

実践データベースプログラミング入門講座

©2011-2012 Maruyama Programming School pg. 14

「接続の追加」

データベース ファイル名を指定するため、「参照」ボタ

ンをクリックしてファイルを選択します。

※キー入力する場合は、フルパスで記述します。

「接続の追加」

データベースファイル名に“SampleDB.mdb”のフルパス

が表示されます。

念のため「テスト接続」ボタンをクリックして、接続に

問題がないか確認しておきましょう。

「OK」ボタンをクリックして「接続の追加」を終了し

ます。

Page 15: 実践データベースプロ グラミング入門講座moeprog.web.fc2.com/M_NET_SC/Manual/PayPal100/... · 実践データベースプロ グラミング入門講座 Window ADO.NET

実践データベースプログラミング入門講座

©2011-2012 Maruyama Programming School pg. 15

「データ接続の選択」

「アプリケーションがデータベースへの接続

に使用するデータ接続」の内容は左記の通りで

す。

「次へ」ボタンをクリックします。

接続文字列は、データベースと接続するための

重要な文字列です。

データベースとプログラムで直接接続する場

合は、この接続文字列を参考にしましょう。

MDB ファイルのプロジェクトへの組み込み

MDB ファイルをプロジェクトに組み込むかどうかの質

問です。

「はい」をクリックして、MDBファイルをプロジェクト

に組み込みます。そうすることで、実行プログラムと

MDB ファイルを同じパス上に配置することができます。

(プロジェクトへ組み込まない場合は、MDBファイルは絶対位置に配置することになります)

Page 16: 実践データベースプロ グラミング入門講座moeprog.web.fc2.com/M_NET_SC/Manual/PayPal100/... · 実践データベースプロ グラミング入門講座 Window ADO.NET

実践データベースプログラミング入門講座

©2011-2012 Maruyama Programming School pg. 16

「データソース構成ウィザード」

「接続文字列をアプリケーション構成ファイ

ルに保存する」

プログラムからデータベースを接続(コネクシ

ョン)するための文字列を“構成ファイル”(=

プロジェクトのプロパティ「設定」タブ)に先

の文字列がセットされます。

「次へ」ボタンをクリックします。

「データソース構成ウィザード」

「データベース オブジェクトの選択」

一つのDataSetに複数のDataTableを作成するこ

とができます。

「データソース構成ウィザード」

□テーブルのチェックボタンをクリックして、

全てのテーブルを選択します。

演習1では、Table_OrderDetail のみですが、演習 2 でマスターを使用しますのでテーブルの全てを選択し

ます。「完了」ボタンをクリックします。

これで Wizard 操作は完了です。DataSet のコードが自動生成されていはずです。

ビルドしてエラーがないことを確認します。

Page 17: 実践データベースプロ グラミング入門講座moeprog.web.fc2.com/M_NET_SC/Manual/PayPal100/... · 実践データベースプロ グラミング入門講座 Window ADO.NET

実践データベースプログラミング入門講座

©2011-2012 Maruyama Programming School pg. 17

2.2.2 データセットの確認

ここまでの設定で、正しく作成されているか「ソリューション エクスプローラ」で確認します。

●SampleDB.mdbファイルがプロジェクトに組み込まれている

●SampleDBDataSet.xsd が作成されている

SampleDBDataSet.Designer.cs(または *.vb)ファイルは、指定されたデ

ータベース独自のクラス(DataSet、DataTable を継承)と、独自の

Adapterクラスを定義したソースファイルです。内容は、データベー

スとウィザードの設定により異なります。

2.2.2.1 データベースを接続するための「接続文字列」を確認します

プロジェクトのプロパティを選択し、設定タブを選択します。

名前「SampleDBConnection」の値が以下の通りになっているかを確認します。

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|¥SampleDB.mdb

C#

VB

VBのデフォルト

非表示コードは「全てのファイル

を表示」ボタンをクリックする