48
わわわわわわ わわわわわ #19

Miku + Oracle = Visual Basic ?

Embed Size (px)

DESCRIPTION

Miku + Oracle = Visual Basic ?. 2008.06.07 初音 玲. 自己紹介. タイトルの意味は?. Part.2. Visual Basic 2008 + Oracle Database 11 g Release 1. 2008.06.07 初音 玲. index. ADO.NET の基本的な構造. .NET データプロバイダ. DataAdapter. Parameter. プログラミング. Command. DataReader. DataSet. Connection. Transaction. - PowerPoint PPT Presentation

Citation preview

Page 1: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

Page 2: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

自己紹介

Page 3: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

タイトルの意味は?

Page 4: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

Visual Basic 2008+

Oracle Database 11 g Release 1

2008.06.07

初音 玲

Part.2

Page 5: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

index

Page 6: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

ADO.NET の基本的な構造

.NET データプロバイダ

Connection

Command DataReader

DataAdapter

データベース

DataSet

Windows コントロールASP.NET コントロール

Transaction

Parameter

プログラミング

プログラミング

Page 7: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

ODP.NET の基本的な構造

ODP.NET

OracleConnection

OracleCommand OracleDataReader

OracleDataAdapter

Oracle Database

DataSet

Windows コントロールASP.NET コントロール

OracleTransaction

OracleParameter

プログラミング

プログラミング

Page 8: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

Visual Studio

ODP.NET

OracleDatabase

ODE.NET

アセンブリアセンブリ

ODT

ODP.NET

ODP.NET

デプロイ

.NET ストアド ( アセンブ

リ )

.NET ストアド ( アセンブ

リ )

ビルド

ODP.NET:Oracle Data Provider for .NETODT :Orace Developer Tools for Visual StudioODE.NET:Oracle Database Extensions for .NET

Page 9: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

対応 DB バージョン 対応 Visual Studio

ODT 10.1.x.x Oracle 9i Database Release 2Oracle Database 10g Release 1

Visual Studio .NET 2003

ODT 10.2.0.1 Oracle 9i Database Release 2Oracle Database 10g Release 1Oracle Database 10g Release 2

Visual Studio .NET 2003

ODT 10.2.0.2 Oracle8i R8.1.7.4 以降 Visual Studio .NET 2003Visual Studio 2005

ODT 11.1.0.6 Oracle 9i Database Release 2 ~ Visual Studio .NET 2003Visual Studio 2005Visual Studio 2008

~ ODT 10.2: サーバーエクスプローラとは別ODT 11.1 ~ : サーバーエクスプローラに統合

Page 10: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

専用ミドルウェアは、やっぱり速い

OLE DB .NET Data Provider

OLE DB Provider for

Oracle

ODP.NETODP.NET oo4ooo4o

ログオンログオン 2.42.4 3.03.0 3.23.2 1.01.0

参照参照 2.02.0 3.53.5 3.53.5 1.01.0

追加追加 0.70.7 1.01.0 1.01.0 1.01.0

更新更新 0.70.7 1.21.2 1.21.2 1.01.0

10

VB2005+oo4oVB2005+oo4o の処理時間を1としたときの相対の処理時間を1としたときの相対比比独自プログラムによる測定

Page 11: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

DataSet クラス

• メモリ上の仮想データベース• DataTables コレクション

– DataTable クラス• DataRows コレクション• DataColumns コレクション• Constraints コレクション

• DataRelations コレクション– RDBMS のリレーション定義に相当– 親子関係を定義

行行

列列

主キー , 外部キー制約主キー , 外部キー制約

Page 12: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

ODP.NET

Page 13: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

index

Page 14: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

Connection オブジェクト

Page 15: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

接続文字列の設定タイミング

Page 16: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

ADO.NET からのエラーの取得

Exceptionで

いいかも?

Exceptionで

いいかも?

Page 17: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

DB サーバDB サーバ

アプリケーション

アプリケーション ODP.NETODP.NET

• ODP.NET のデフォルト動作は Pooling=True

User Id={0};Password={1};Data Source= ホスト文字列 ;

接続接続

切断切断

接続接続

切断切断

接続接続

切断切断

接続処理疑似

疑似疑似

疑似疑似

Page 18: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

index

Page 19: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

Command オブジェクト

Page 20: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

SELECT 文設定タイミング

Connection

接続タイミング

は?

接続タイミング

は?

Page 21: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

DataReader オブジェクト

必須なのは?

必須なのは?

必須なのは?

必須なのは?

Page 22: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

DataReader を使う上での注意点

Using _cn As New OracleConnection(CnString) _cn.Open() Using _cmd As New OracleCommand(SqlString, _cn) Dim rd As OracleDataReader = Nothing rd = _cmd.ExecuteReader Do While rd.Read Me.ResultList.Items.Add(rd.Item("fname").ToString) Loop End Using Using _cmd As New OracleCommand(SqlString, _cn) Dim rd As OracleDataReader = Nothing rd = _cmd.ExecuteReader Do While rd.Read Me. ResultList.Items.Add(rd.Item("fname").ToString) Loop End Using _cn.Close()End Using

間違いはどこ?

間違いはどこ?

Page 23: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

列単位でデータを実取得する

Page 24: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

Parameter オブジェクト

なぜ違う?なぜ違う?

Page 25: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

Parameter オブジェクト

Page 26: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

GUI 操作による DB アプリ作成

26

DEPT

EMP

マスターディテール形式の画面を作成マスターディテール形式の画面を作成•GUIGUI 操作のみ操作のみ

SplitContainer

詳細

DataGridView

Page 27: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

GUI 操作による開発と生産性

GUIGUI でお手軽開発で良いか検討でお手軽開発で良いか検討•すべてをカバーするものではないすべてをカバーするものではない

意図したタイミングで意図したデータを取意図したタイミングで意図したデータを取得得•業務の特性に合わせて業務の特性に合わせて•画面の特性に合わせて画面の特性に合わせて•お客様の特性に合わせてお客様の特性に合わせて

そのためにはそのためには•やはりコーディングが必要やはりコーディングが必要

27

Page 28: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

index

Page 29: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

SQL 文の直接実行 (Command オブジェクト )

Page 30: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

データソースと DataSet クラスの対応付け

データソース Command DataAdapter Dataset

アプリ

Page 31: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

DataAdapter オブジェクト

Openタイミング

は?

Openタイミング

は?

Page 32: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

CommandBuilder で SQL 作成

_cn.Open()Using _tr As SqlTransaction = _cn.BeginTransaction() Using _cmd As New SqlCommand("SELECT * FROM employee ", _cn) _cmd.Transaction = _tr '### 重要 ### Using _da As New SqlDataAdapter(_cmd) Using _cb As New SqlCommandBuilder(_da) _da.UpdateCommand = _cb.GetUpdateCommand() _da.InsertCommand = _cb.GetInsertCommand() _da.DeleteCommand = _cb.GetDeleteCommand() Try _da.Update(Ds, "employee") _tr.Commit() Catch ex As Exception MessageBox.Show(ex.Message, ・・・ ) _tr.Rollback() End Try End Using End Using End UsingEnd Using

Page 33: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

CommandBuilder オブジェクト

This property is not supported.

実装すらされていません

Page 34: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

DataSet の利用時の注意点

Page 35: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

DataSet の利用時の注意点

Page 36: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

トランザクション処理

GUI 操作で作成した DB アプリには致命的障害– 保存ボタンで保存されるのは、 DEPT のみ

36

Me.Validate() Me.DEPTBindingSource.EndEdit() Me.DEPTTableAdapter.Update(Me.DataSet1.DEPT)

EMPEMP へのへの UpdateUpdate メソッドを追加で解メソッドを追加で解決?決?•DEPTDEPT 更新後、更新後、 EMPEMP 更新に失敗する更新に失敗する

とと………… ....トランザクション制御が必要トランザクション制御が必要

Page 37: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

暗黙的なトランザクション

TableAdapter ごとに Connection が存在– Connection に対するトランザクションでは無

37

System.TransactionsSystem.Transactions クラスを使うクラスを使う

DEPTTableAdapter オブジェクト

EMPTableAdapter オブジェクトOracle

Database

OracleConnection

オ ブ ジ ェ ク ト

OracleConnectionオ ブ ジ ェ ク ト

OracleCommandオブジェクト

OracleCommandオブジェクト

MS-DTC ( マイクロソフト分散トランザクションコーディネータ )MS-DTC ( マイクロソフト分散トランザクションコーディネータ )

Page 38: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

暗黙的なトランザクション

Try Me.Validate() Using _trn As New System.Transactions.TransactionScope Me.DEPTBindingSource.EndEdit() Me.DEPTTableAdapter.Update(Me.DataSet1.DEPT) ' Me.EMPBindingSource.EndEdit() Me.EMPTableAdapter.Update(Me.DataSet1.EMP) ' _trn.Complete() 'トランザクション完了 End UsingCatch ex As System.Transactions.TransactionAbortedException MessageBox.Show(ex.Message)Catch ex As Exception MessageBox.Show(ex.Message)End Try

38

System.Transactions の参照設定を忘れないようにSystem.Transactions の参照設定を忘れないように

ADO.NET 2.0 からはCOM+ カタログ登録不要GAC への登録不要

Page 39: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

明示的なトランザクション

Connection が1つ– Connection に対するトランザクションで可能

39

OracleDatabase

OracleConnection

オ ブ ジ ェ ク ト

OracleCommandオブジェクト

OracleCommandオブジェクト

Page 40: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

明示的なトランザクション

_trn = cn.BeginTransaction()Try : _DBCmdEMP.Transaction = _trn _DBCmdDEPT.Transaction = _trn _DBCmdEMP.ExecuteNonQuery() _DBCmdDEPT.ExecuteNonQuery() _trn.Commit()Catch ex As Exception _trn.Rollback()End Try

40

Page 41: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

( おまけ )LINQ to SQL

Page 42: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

index

Page 43: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

権限

Page 44: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

Windows

Oracle におけるユーザ管理

OracleOracle 認証

OracleWindows 認証

ユーザー

ローカル認証だと 4 万人くらいが限界なので AD 認証も考慮

インスタンス

ユーザー

インスタンス

ユーザー

認証認証

認証認証

権限権限

権限権限

Security

Policy

Security

Policy

Security

Policy

Security

Policy

Security

Policy

Security

Policy

Page 45: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

Windows アプリにおけるお勧め認証構造

XML WEB サービス DB

DB 認証

Win アプリ

ID/ パス渡し

Windows 認証

Page 46: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

WEB アプリにおけるお勧め認証構造

ブラウザ XML WEB サービス DB

DB 認証

WEB アプリ

ID/ パス渡し

Page 47: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19

まとめ

Page 48: Miku  + Oracle = Visual Basic ?

わんくま同盟 大阪勉強会 #19