Miku + Oracle = Visual Basic ?

Slides:



Advertisements
Similar presentations
ASP 入門2 ー授業でアンケート集計ー. ねらい 総合実習等で、相互評価を行った際の集計を ASP + AccessDB で行う。 相互評価の点数部分は見られないように、感 想部分(テキスト)は見えるようにする。 ( 発表直後のフィードバック ) AccessDB に蓄積した得点は、 Excel.
Advertisements

1 Layout Utilities の紹介 Layout Utilities とは、お客様のプログラムに 流し込み印刷を簡単に組み込めるソフトウエア開発ツールです 無償 流し込み印刷の例.
0 クイックスタートガイド|管理者編 スマートデバイスのビジネス活用を支援する法人向けファイル共有サービス.
わんくま同盟 名古屋勉強会 # 初音 玲. わんくま同盟 名古屋勉強会 #4 今日の前提 Windows Mobile アプリの話が中心 BASIC 認証 httphttp http (XML) SOAP.
Curlの特徴.
IIS 4.0で開発をするコツ Webアプリケーション構築.
DB(データベース)のおはなし 作成者:小野正広 DBと言っても、  ドラゴンボール ではないですぞ! 3/1/2017.
情報理工学部 情報システム工学科 ラシキアゼミ 3年 H 井奈波 和也
WagbyR6.5 Update 14 PPT版 更新情報
ハルビン絵葉書コレクションシステムの再構築と機能追加 -サーバ側:PHPとMySQLを用いて
JPAを利用した RESTful Webサービスの開発
.NET テクノロジー を利用した SAP ソリューションの拡張 (3階層化) (評価環境構築ガイド)
6-2 データベース 1.SQLite SQLを単純化した SQLite を使ってデータベースを操作 表「fruit」
VBA H106077 寺沢友宏.
SQL J2EE I 第3回 /
WagbyR6.5 Update 12 PPT版 更新情報
Solid Edge Customization with VB   (Fundamentals)
Microsoft .NET 入門 Silverlight のための 福井コンピュータ株式会社 小島 富治雄
Delphi Day ~Delphi 概要、および新バージョンのご紹介~
Visual Studio LightSwitchの概要
はじめてのASP.NET 楽しいアプリ制作の会 #1 TWorks.
Live Framework 入門 その2 JZ5(松江) 2009/8/22.
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
SAP & SQL Server テクニカルアーキテクチャ概要 マイクロソフト株式会社 SAP/Microsoft コンピテンスセンター
.NET テクノロジー を利用した SAP ソリューションの拡張 (3階層化) (評価環境構築ガイド)
マイクロソフト Access での SQL 演習 第1回 SQL問い合わせ(クエリ)
Visual Basic Oracle Database 11g Release 1
SQL パフォーマンス チューニング ~ カバーリングインデックス/クエリヒントの利用~
Oracle XEを使ってみよう 初音玲.
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
3-10. MySQLシステムの管理  2004年6月10日  大北高広                01T6010F.
[コース: B3] .NET Framework 2.0 分散アプリケーション開発
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
SQL パフォーマンス チューニング ~ プランガイドの利用~
いまさら聞けないVB2008 ADO.NET超入門 初音 玲.
MDC Special Session Report tk-engineering.com
MVP for VB が語る C# 入門 初音 玲.
MVP for VB が語る C# 入門 初音 玲.
Active Directory & SAP ユーザー管理統合ソリューション
わんくま同盟・techbank.jp 夏椰 Insight Technology, Inc. 今川 美保
Emoneαプログラミング入門 初音 玲.
.NET Framework 3.0 概要 (旧称 : WinFX)
データベースアクセス技術 ADO.NET 2.0 開発者カテゴリ ◆NOTES◆
仕事: SystemVerilogを使いたい
Javaによる Webアプリケーション入門 第7回
Microsoft BizTalk Server & SAP PP モジュール 連携検証レポート概要
3-3.テーブルを更新する 2004年 4月22日(木) 01T6074X 茂木啓悟.
COM コンポーネント・オブジェクト・モデル.
7-0.SWORD Client for WEKO インストールマニュアル Version 2.2
Oracle XEを使ってみよう 初音玲.
情報システム1及び演習 第一回 データベースの概要.
Twitterクライアントに学ぶASP.NETアプリ
3.リレーショナルデータベース,主キー, SQL
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
情報基礎演習I(プログラミング) 第11回 7月12日 水曜5限 江草由佳
vc-2. Visual Studio C++ のデバッガー (Visual Studio C++ の実用知識を学ぶシリーズ)
System.AddInを利用したアプリケーション拡張 - アドインの開発 -
TableAdapterとSQLDependency 便利さを使い倒そう。 by えムナウ
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
CO-Client Opeartion 1.1 利用履歴データベースの設計 (スキーマ バージョン 対応)
Microsoft Office Project Server 2007
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
SQL J2EE I (データベース論) 第3回 /
C#プログラミング実習 第1回.
System.AddInを利用したアプリケーション拡張 - アドインの開発 -
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
SQL データベース論 第11回.
Presentation transcript:

Miku + Oracle = Visual Basic ? 2008.06.07 初音 玲

自己紹介 Z80 アセンブラ 6809 F-BASIC N88-BASIC FORTRAN 77 COBOL LISP Turbo Pascal Prolog KABA C言語 Mシリーズ PL/I VB3.0~ PL/SQL T-SQL VB2005/2008

タイトルの意味は?

Visual Basic 2008 + Oracle Database 11g Release 1 Part.2 Visual Basic 2008 + Oracle Database 11g Release 1 2008.06.07 初音 玲

index 接続 データ取得 データ更新 権限

ADO.NETの基本的な構造 データベース .NETデータプロバイダ DataSet Windowsコントロール ASP.NETコントロール Parameter DataAdapter プログラミング Command DataReader DataSet Connection Transaction プログラミング データベース Windowsコントロール ASP.NETコントロール

ODP.NETの基本的な構造 Oracle Database ODP.NET DataSet Windowsコントロール OracleParameter OracleDataAdapter プログラミング OracleCommand OracleDataReader DataSet OracleConnection OracleTransaction プログラミング Oracle Database Windowsコントロール ASP.NETコントロール

Visual StudioからOracleに接続 ビルド アセンブリ ODT デプロイ .NETストアド(アセンブリ) ODP.NET ODP.NET ODE.NET ODP.NET Oracle Database ODP.NET:Oracle Data Provider for .NET ODT :Orace Developer Tools for Visual Studio ODE.NET:Oracle Database Extensions for .NET

ODTとVSのバージョン関連表 対応DBバージョン 対応Visual Studio ODT 10.1.x.x Oracle 9i Database Release 2 Oracle Database 10g Release 1 Visual Studio .NET 2003 ODT 10.2.0.1 Oracle Database 10g Release 2 ODT 10.2.0.2 Oracle8i R8.1.7.4以降 Visual Studio 2005 ODT 11.1.0.6 Oracle 9i Database Release 2~ Visual Studio 2008 ~ODT 10.2:サーバーエクスプローラとは別 ODT 11.1~:サーバーエクスプローラに統合

ログオン 2.4 3.0 3.2 1.0 参照 2.0 3.5 追加 0.7 更新 1.2 専用ミドルウェアは、やっぱり速い OLE DB .NET Data Provider OLE DB Provider for Oracle ODP.NET oo4o ログオン 2.4 3.0 3.2 1.0 参照 2.0 3.5 追加 0.7 更新 1.2 VB2005+oo4oの処理時間を1としたときの相対比 独自プログラムによる測定

メモリ上の仮想データベース DataTablesコレクション DataRelationsコレクション DataTableクラス DataSetクラス メモリ上の仮想データベース DataTablesコレクション DataTableクラス DataRowsコレクション DataColumnsコレクション Constraintsコレクション DataRelationsコレクション RDBMSのリレーション定義に相当 親子関係を定義 行 列 主キー,外部キー制約

データソースから前方向、読取専用でデータ取得 ODP.NET 特定のデータソースへの接続を確立 OracleConnection オブジェクト データソースに対してコマンドを実行 OracleCommand データソースから前方向、読取専用でデータ取得 OracleDataReader DataSetを設定し、データソースを使用して更新内容を解決 OracleDataAdapter

index 接続 データ取得 データ更新 権限

Connectionオブジェクト Dim cn As New SqlConnection() cn.ConnectionString = "User Id=sa;" & _ "Password=aU98rrx2;" & _ "Initial Catalog=pubs;" & _ "Data Source=servername;" cn.Open() SQL Server SqlConnection Dim cn As New OracleConnection() cn.ConnectionString = "User Id=scott;" & _ "Password=tiger;" & _ "Data Source=orcl.world;" Oracle(ODP.NET) OracleConnection

接続文字列の設定タイミング Dim cn As New OracleConnection("User id=・・・・") cn.Open 変数宣言時点 Dim cn As New OracleConnection() : (中略) : cn.ConnectionString = "User id=・・・・" cn.Open() 任意

CatchにはOracleException ? Try~Catch ADO.NETからのエラーの取得 cn.OpenをTry~Catchで囲む CatchにはOracleException ? Try~Catch ex.Message ex.StackTrace OracleException Exception で いいかも?

ODP.NETのデフォルト動作はPooling=True 接続プーリング DBサーバ アプリケーション ODP.NET 接続 接続処理 切断 疑似 接続 疑似 切断 疑似 接続 疑似 切断 疑似 User Id={0};Password={1};Data Source=ホスト文字列; ODP.NETのデフォルト動作はPooling=True

index 接続 データ取得 データ更新 権限

Commandオブジェクト Using _cmd As New SqlCommand() _cmd.Connection = cn _cmd.CommandText = "SELECT * FROM employee" : End Using SQL Server SqlCommand Using _cmd As New OracleCommand() Oracle(ODP.NET) OracleCommand

Using _cmd As New OracleCommand(sql, cn) : End Using 変数宣言時点 SELECT文設定タイミング Using _cmd As New OracleCommand(sql, cn) : End Using 変数宣言時点 Using _cmd As New OracleCommand() _cmd.Connection = cn _cmd.CommandText = sql : 任意 Connection 接続 タイミングは?

DataReaderオブジェクト Dim rd As SqlDataReader() rd = _cmd.ExecuteReader Do While rd.Read Me.ResultList.Items.Add(rd.Item("fname").ToString) Loop rd.Close() SQL Server SqlDataReader Dim rd As OracleDataReader() Oracle(ODP.NET) OracleDataReader 必須なのは? 必須なのは?

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 Me. ResultList.Items.Add(rd.Item("fname").ToString) _cn.Close() 間違いは どこ?

列単位でデータを実取得する rd.Readメソッドで1行分を読み込む 1行前の読みなおしは不可 行を飛ばして読み込むのも不可 rd = _cmd.ExecuteReader() rd.Item(0)で1項目分を読み込む rd.GetBytes(0,stp,outSize,0,bufferSize)で分割読み込み 先頭項目から順番に取得 項目取得後に、それより前の項目取得不可 項目を飛ばして取得不可 rd = _cmd.ExecuteReader( _ CommandBehavior.SequentialAccess)

Parameterオブジェクト sqlString = _"SELECT * FROM employee " & _ "WHERE fname=@fname AND lname=@lname" Using _cmd As New SqlCommand(sqlString, _cn) _cmd.Parameters.Add(New SqlParameter("fname", Me.FName.Text)) _cmd.Parameters.Add(New SqlParameter("lname", Me.LName.Text)) : End Using SQL Server SqlParameter sqlString = "SELECT * FROM employee " & _ "WHERE fname=:fname AND lname=:lname" Using _cmd As New OracleCommand(sqlString, _cn) _cmd.BindByName = True _cmd.Parameters.Add("fname", Me.FName.Text) _cmd.Parameters.Add("lname", Me.LName.Text) : Oracle(ODP.NET) OracleParameter なぜ違う?

Parameterオブジェクト 以下の条件を与えたときの実行結果は?

マスターディテール形式の画面を作成 GUI操作のみ GUI操作によるDBアプリ作成 詳細 DEPT SplitContainer EMP DataGridView

意図したタイミングで意図したデータを取得 GUI操作による開発と生産性 GUIでお手軽開発で良いか検討 すべてをカバーするものではない 意図したタイミングで意図したデータを取得 業務の特性に合わせて 画面の特性に合わせて お客様の特性に合わせて そのためには やはりコーディングが必要

index 接続 データ取得 データ更新 権限

SQL文の直接実行(Commandオブジェクト) sqlString = _ "UPDATE employee SET minit=@minit WHERE emp_id=@emp_id" Using _cmd As New SqlCommand(sqlString, _cn) _cmd.Parameters.Add(New SqlParameter("emp_id", Me.Emp_Id.Text)) _cmd.Parameters.Add(New SqlParameter("minit", Me.Minit.Text)) _cmd.ExecuteNonQuery End Using SQL Server SqlParameter sqlString = _ "UPDATE employee SET minit=:minit WHERE emp_id=:emp_id" Using _cmd As New OracleCommand(sqlString, _cn) _cmd.BindByName = True _cmd.Parameters.Add("emp_id", Me.Emp_Id.Text) _cmd.Parameters.Add("minit", Me.Minit.Text) Oracle(ODP.NET) OracleParameter

データソースとDataSetクラスの対応付け .NETデータプロバイダには、更新可能セットがない もちろん更新も可能 DataSetは仮想的なデータベース DataSetによるデータソースの更新可能セットを実現 .NETデータプロバイダとDataSetの相互乗り入れ アプリ データソース Command DataAdapter Dataset

DataAdapterオブジェクト Using _cn As New SqlConnection(CnString) Using _cmd As New SqlCommand("SELECT * FROM employee", _cn) Using _da As New SqlDataAdapter(_cmd) _da.Fill(ds, "employee") Me.ResultGrid.DataSource = ds.Tables("employee") End Using SQL Server SqlDataAdapter Using _cn As New OracleConnection(CnString) Using _cmd As New OracleCommand("SELECT * FROM employee", _cn) Using _da As New OracleDataAdapter(_cmd) Oracle(ODP.NET) OracleDataAdapter Open タイミングは?

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

CommandBuilderオブジェクト True:UPDATE SQLのSET句にすべてセット False:UPDATE SQLのSET句に変更値だけをセット 利用状況モニタで確認 SET [minit] = @p1 SetAllValuesプロパティ CompareAllSearchableValues WHERE (([emp_id] = @p9) AND ([fname] = @p10) AND ((@p11 = 1 AND [minit] IS NULL) OR ([minit] = @p12)) AND ([lname] = @p13) AND ([job_id] = @p14) AND ((@p15 = 1 AND [job_lvl] IS NULL) OR ([job_lvl] = @p16)) AND ([pub_id] = @p17) AND ([hire_date] = @p18)) CompareRowVersion WHERE (([emp_id] = @p9)) OverwriteChanges WHERE (([emp_id] = @p9)) ConflictOptionプロパティ 実装すらされていません This property is not supported.

DataSetの利用時の注意点 OracleのNUBER型の有効桁数 38桁 DataSet (CLR)の10進数型の有効桁数 28桁 SQL Serverの10進数型の扱い Fillメソッド実行時に10進数型の値が28桁を超えたとき 実行時エラー Oracle.DataAccess.Types.OracleDecimal 対策

Fillメソッドで必要データのみ取得 表示データから選択データ抽出 selectメソッド利用 Fillメソッドで全データ取得 DataSetの利用時の注意点 Fillメソッドで全データ取得 selectメソッドで必要な情報取得 Fillメソッドで必要データのみ取得 表示データから選択データ抽出 selectメソッド利用

GUI操作で作成したDBアプリには致命的障害 トランザクション処理 GUI操作で作成したDBアプリには致命的障害 保存ボタンで保存されるのは、DEPTのみ Me.Validate() Me.DEPTBindingSource.EndEdit() Me.DEPTTableAdapter.Update(Me.DataSet1.DEPT) EMPへのUpdateメソッドを追加で解決? DEPT更新後、EMP更新に失敗すると…….. トランザクション制御が必要

TableAdapterごとにConnectionが存在 暗黙的なトランザクション TableAdapterごとにConnectionが存在 Connectionに対するトランザクションでは無理 OracleConnection オブジェクト MS-DTC (マイクロソフト分散トランザクションコーディネータ) DEPTTableAdapterオブジェクト OracleCommand オブジェクト Oracle Database OracleConnection オブジェクト EMPTableAdapterオブジェクト OracleCommand オブジェクト MS-DTC (マイクロソフト分散トランザクションコーディネータ) System.Transactionsクラスを使う

暗黙的なトランザクション ADO.NET 2.0からは COM+カタログ登録不要 GACへの登録不要 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 Using Catch ex As System.Transactions.TransactionAbortedException MessageBox.Show(ex.Message) Catch ex As Exception End Try ADO.NET 2.0からは COM+カタログ登録不要 GACへの登録不要 System.Transactionsの参照設定を忘れないように

Connectionが1つ Oracle Database Connectionに対するトランザクションで可能 明示的なトランザクション OracleConnection オブジェクト OracleCommand オブジェクト Oracle Database OracleCommand オブジェクト

明示的なトランザクション _trn = cn.BeginTransaction() Try : _DBCmdEMP.Transaction = _trn _DBCmdDEPT.Transaction = _trn _DBCmdEMP.ExecuteNonQuery() _DBCmdDEPT.ExecuteNonQuery() _trn.Commit() Catch ex As Exception _trn.Rollback() End Try

LINQtoSQLクラスを追加(.dbml) サーバエクスプローラからDrag&Drop 標準クエリ演算子を記述

index 接続 データ取得 データ更新 権限

権限 コネクションプーリング アプリ側でアクセス制御 直接ツールで接続されたら? アプリ側にバグがあったら? 接続は、アプリ固有ユーザID DBの設定でアクセス制御 直接ツールで接続されても安全 アプリ側にバグがあっても安全 接続は、利用者固有ユーザID

Oracleにおけるユーザ管理 Oracle認証 Oracle インスタンス ユーザー 認証 権限 Windows Windows認証 Security Policy Windows Windows認証 Oracle インスタンス ユーザー ユーザー 認証 権限 Security Policy Security Policy ローカル認証だと4万人くらいが限界なのでAD認証も考慮

Windowsアプリにおけるお勧め認証構造 XML WEBサービス DB ID/パス渡し DB認証 Windows認証

WEBアプリにおけるお勧め認証構造 ブラウザ WEBアプリ XML WEBサービス DB ID/パス渡し DB認証

接続 権限 データ取得 データ更新 接続プーリング Oracle認証 Windows認証 コード記述開発 GUI操作開発 まとめ 接続 権限 接続プーリング Oracle認証 データ取得 Windows認証 コード記述開発 GUI操作開発 データ更新 CommandBuilder トランザクション

QA