- - PR -
DataAdapterのUpdateで更新する場合のトランザクション管理
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-01-19 23:10
初歩的な質問かもしれませんが、
VB.NETでOleDbのDataAdapterとCommandBuliderを使用してデータベースの更新処理を行っているのですが、 トランザクションの管理のしかたが分からず困っております。 OleDbCommandで更新するときにはOleDbCommandのTransactionプロパティにトランザクションを指定してやればいいのですが、DataAdapterのUpdate時はどこにトランザクションを指定すればいいのでしょうか。 もしかしてトランザクション管理ができないのでしょうか。 ご存知の方おいででしたらよろしくお願いいたします。 | ||||
|
投稿日時: 2005-01-19 23:18
DataAdapterのselectcommand,deletecommand,updatecommnadのそれぞれに
あります。 | ||||
|
投稿日時: 2005-01-19 23:24
書き忘れましたが、InsertCommandにも。
| ||||
|
投稿日時: 2005-01-19 23:25
早速の回答ありがとうございます。
確かにおっしゃるとおり、DataAdapterの各コマンドにTransactionプロパティがあるのですが、そこにトランザクションを設定してもエラーになってしまうのです。 デバッグでウォッチしてみると分かるのですが、これらのプロパティがNothingになっているためです。 ということで困ってしまったのですが、何かをすればこのプロパティに設定できるのでしょうか。 よろしくお願いいたします。 | ||||
|
投稿日時: 2005-01-19 23:32
すみません、分かりました。
先にSELECT文を発行しているのですが、そちらのトランザクションプロパティに設定すればうまく出来ました。 どうもありがとうございました。 | ||||
|
投稿日時: 2005-01-20 00:08
どうやられたのか、私にはぴんと来ませんが、
Dim t As OleDb.OleDbTransaction Me.OleDbConnection1.Open() t = Me.OleDbConnection1.BeginTransaction() のように私はしています。 | ||||
|
投稿日時: 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() どうもありがとうございました。 | ||||
|
投稿日時: 2005-01-22 08:22
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 ] |
1|2|3
次のページへ»