tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルデータベースの排他について
記事No10557
投稿日: 2011/07/05(Tue) 21:53
投稿者FIN
初めまして,FINと申します。
VB.NET歴2年の初心者です。

下記のようなコーディングをしたところ、更新処理をコミットされるまで他のトランザクション(別ユーザ)がテーブルに更新出来ない現象が発生致しました。

楽観的排他を行なう場合はどのようなコーディングが必要でしょうか?

実行環境OS:WindowsXP
.NETのバージョン:.NET Framework2.0
データベース:Oracle8I

以下、ソース
------------------------------------------------------------------------

'接続オブジェクトをインスタンス化します。
Me._con = New OracleConnection(Me._ocsb.ConnectionString)

'データベースに接続します。
Me._con.Open()

'コマンドオブジェクトをインスタンス化します。
Me._cmd = New OracleCommand()

'コマンドオブジェクトに接続オブジェクトを引き渡します。
Me._cmd.Connection = Me._con

'トランザクションを開始します。
Me._tran = Me._con.BeginTransaction()

'コマンドオブジェクトにトランザクションを引き渡します。
Me._cmd.Transaction = Me._tran

'SQLを設定します。
Dim sql As String = "*更新SQL*"

'SQLを実行します。
Me._cmd.CommandText = sql

'この処理間に更新対象テーブルが他のトランザクションからアクセス出来なくなります。

'コミット処理を行います。
Me._tran.Commit()

------------------------------------------------------------------------

[ツリー表示へ]
タイトルRe: データベースの排他について
記事No10558
投稿日: 2011/07/05(Tue) 21:59
投稿者FIN
失礼いたしました、ソースに誤りがありました。

------------------------------------------------------------------------
Imports System
Imports System.Data
Imports System.Data.OracleClient


'接続オブジェクトをインスタンス化します。
Me._con = New OracleConnection(Me._ocsb.ConnectionString)

'データベースに接続します。
Me._con.Open()

'コマンドオブジェクトをインスタンス化します。
Me._cmd = New OracleCommand()

'コマンドオブジェクトに接続オブジェクトを引き渡します。
Me._cmd.Connection = Me._con

'トランザクションを開始します。
Me._tran = Me._con.BeginTransaction()

'コマンドオブジェクトにトランザクションを引き渡します。
Me._cmd.Transaction = Me._tran

'SQLを設定します。
Dim sql As String = "*更新SQL*"

'SQLを実行します。
Me._cmd.CommandText = sql
Me._cmd.CommandType = commandType
Me._cmd.ExecuteNonQuery()

'この処理間に更新対象テーブルが他のトランザクションからアクセス出来なくなります。

'コミット処理を行います。
Me._tran.Commit()

------------------------------------------------------------------------

[ツリー表示へ]
タイトルマルチポスト
記事No10559
投稿日: 2011/07/12(Tue) 09:41
投稿者(報告)
マルチポスト後、放置
http://bbs.wankuma.com/index.cgi?mode=al2&namber=60484

[ツリー表示へ]