- PR -

DataAdapterのUpdateで更新する場合のトランザクション管理

投稿者投稿内容
kes
ベテラン
会議室デビュー日: 2004/08/10
投稿数: 67
投稿日時: 2005-01-19 23:10
初歩的な質問かもしれませんが、
VB.NETでOleDbのDataAdapterとCommandBuliderを使用してデータベースの更新処理を行っているのですが、
トランザクションの管理のしかたが分からず困っております。
OleDbCommandで更新するときにはOleDbCommandのTransactionプロパティにトランザクションを指定してやればいいのですが、DataAdapterのUpdate時はどこにトランザクションを指定すればいいのでしょうか。
もしかしてトランザクション管理ができないのでしょうか。

ご存知の方おいででしたらよろしくお願いいたします。
Lin
ベテラン
会議室デビュー日: 2004/11/08
投稿数: 50
投稿日時: 2005-01-19 23:18
DataAdapterのselectcommand,deletecommand,updatecommnadのそれぞれに
あります。
Lin
ベテラン
会議室デビュー日: 2004/11/08
投稿数: 50
投稿日時: 2005-01-19 23:24
書き忘れましたが、InsertCommandにも。
kes
ベテラン
会議室デビュー日: 2004/08/10
投稿数: 67
投稿日時: 2005-01-19 23:25
早速の回答ありがとうございます。

確かにおっしゃるとおり、DataAdapterの各コマンドにTransactionプロパティがあるのですが、そこにトランザクションを設定してもエラーになってしまうのです。
デバッグでウォッチしてみると分かるのですが、これらのプロパティがNothingになっているためです。

ということで困ってしまったのですが、何かをすればこのプロパティに設定できるのでしょうか。

よろしくお願いいたします。
kes
ベテラン
会議室デビュー日: 2004/08/10
投稿数: 67
投稿日時: 2005-01-19 23:32
すみません、分かりました。

先にSELECT文を発行しているのですが、そちらのトランザクションプロパティに設定すればうまく出来ました。

どうもありがとうございました。
Lin
ベテラン
会議室デビュー日: 2004/11/08
投稿数: 50
投稿日時: 2005-01-20 00:08
どうやられたのか、私にはぴんと来ませんが、
Dim t As OleDb.OleDbTransaction
Me.OleDbConnection1.Open()
t = Me.OleDbConnection1.BeginTransaction()
のように私はしています。
kes
ベテラン
会議室デビュー日: 2004/08/10
投稿数: 67
投稿日時: 2005-01-20 10:49
だいたい下記のような感じです。

'接続
OleCon = New OleDb.OleDbConnection
OleCon.Open()

'検索
OleDa1 = New OleDb.OleDbDataAdapter(strSql, OleCon)
OleCb1 = New OleDb.OleDbCommandBuilder(OleDa1)

'更新
OleTran1 = OleCon.BeginTransaction()
OleDa1.SelectCommand.Transaction = OleTran1
OleDa1.Update(dt1)
OleTran1.Commit()


どうもありがとうございました。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2005-01-22 08:22
引用:

'更新
OleTran1 = OleCon.BeginTransaction()
OleDa1.SelectCommand.Transaction = OleTran1
OleDa1.Update(dt1)
OleTran1.Commit()


SelectCommandにTransactionを設定するとスキーマ情報にもトランザクションが
適用されるので性能上好ましくないと書籍で読んだことがあります。

【改善前】
Dim dt As New DataTable
Dim con As New SqlConnection(strConnectionString)
Dim da As New SqlDataAdapter(strSQL, con)
Dim cb As New SqlCommandBuilder(da)
con.Open()
da.Fill(dt)
Dim trn As SqlTransaction = con.BeginTransaction()
da.SelectCommand.Transaction = trn
da.Update(dt)
trn.Commit()
con.Close()

【改善後】
Dim dt As New DataTable
Dim con As New SqlConnection(strConnectionString)
Dim da As New SqlDataAdapter(strSQL, con)
Dim cb As New SqlCommandBuilder(da)
con.Open()
cb.GetUpdateCommand()
da.Fill(dt)
Dim trn As SqlTransaction = con.BeginTransaction()
da.InsertCommand.Transaction = trn
da.UpdateCommand.Transaction = trn
da.DeleteCommand.Transaction = trn
da.Update(dt)
trn.Commit()
con.Close()

_________________
ASP.NETサンプル集(Web Matrix版)

[ メッセージ編集済み 編集者: Access 編集日時 2005-01-22 10:52 ]

スキルアップ/キャリアアップ(JOB@IT)