- PR -

同時に複数テーブルを更新するには?

1
投稿者投稿内容
damepg
大ベテラン
会議室デビュー日: 2003/03/19
投稿数: 229
お住まい・勤務地: 東京都内
投稿日時: 2003-09-08 11:46
VB.NETでSpeadSheetでWeb開発をしています。
1つのSpreadSheetにはA,B,Cという3つのカラム(列)があります。
この3つのカラムは全て異なるテーブルのカラムです。

同時にこれら3つのテーブルを更新する方法はありますか?
カラムが全てひとつのテーブルの場合は下記のようなサンプルがあったのですが。

' 変更内容をデータセットに反映します。
Dim ds As System.Data.DataSet = FpSpread1.ActiveSheetView.DataSource
(途中略)
' 変更内容をデータベースに反映します。
Dim n As Integer = OleDbDataAdapter1.Update(ds, "Order")
PoH
常連さん
会議室デビュー日: 2003/09/09
投稿数: 48
投稿日時: 2003-09-09 14:31
引用:
同時にこれら3つのテーブルを更新する方法はありますか?



これはひとつのSQLで複数のテーブルを更新したい
ということであっているでしょうか?

私は.NETに関しては詳しくないですが、DBの性質上それは無理だと思います。
複数のテーブルを更新したいならテーブル分のSQLを書いてやる必要があります。

私の勉強不足でそういう方法が存在したら申し訳ありません。
でも、もし1SQLで複数テーブルの更新があったとしても、
1SQLづつ更新するより、はるかにレスポンスは落ちると思われます。

ほとんどのプログラムがDBありきといっても過言ではありません
文面を見る限りDBが多少なりとも関係するプログラムを扱っておられるようなので
DBに関しては一度勉強してみる事をお勧めいたします
Beatle
ぬし
会議室デビュー日: 2003/06/09
投稿数: 394
投稿日時: 2003-09-09 15:07
SpeadSheetでできるのかどうかはわかりませんが、通常はこのような場合、
トランザクションを発行して3つの更新SQLを発行し、成功すれば最後に
Commitを発行します。(失敗の場合はRollBack)

DB内ではcommitが発行されれば更新が反映されますから、見かけ上3つの
テーブルに同時に更新がかかったように見えます。
ハヤ
常連さん
会議室デビュー日: 2003/06/04
投稿数: 41
投稿日時: 2003-09-09 15:20
PoHさんのおっしゃるとおりだと思います。。。。。。

が、私はこのスレッドを見て考えたのは、

DataAdapterのUpdateCommandプロパティに通常、
コード:
DataAdapterHoge.UpdateCommand = "UPDATE Customers SET CompanyName = @CompanyName WHERE CustomerID = @CustomerID";


と設定すると思いますが、

コード:
DataAdapterHoge.UpdateCommand = "UPDATE Customers1 SET CompanyName = @CompanyName WHERE CustomerID = @CustomerID;" +
                                "UPDATE Customers2 SET CompanyName = @CompanyName WHERE CustomerID = @CustomerID";


このように、;とかで区切ったりして複数のSQLを発行する事は仕様としてありえなくはないなぁ、と思ったりしました。
データプロバイダによってはできるかもなあと。勿論、そこまでの知識はないのでレスしなかったのですが。

#PoHさんの最後のアドバイスには大賛成です。
いし
常連さん
会議室デビュー日: 2003/04/15
投稿数: 27
投稿日時: 2003-09-09 15:34
Oleのほうはどうか分かりませんが、少なくともSqlDataAdapterでは、
ハヤさんが書かれているように複数のSQLを一つのコマンドに設定し、
SqlDataAdapter.Update()で一括更新というのはできます。

そのほうが、Updateが一回で済むので楽だと思います。

OleDataAdapterでできなかったらすみません。
PoH
常連さん
会議室デビュー日: 2003/09/09
投稿数: 48
投稿日時: 2003-09-09 15:42
引用:

コード:
 
DataAdapterHoge.UpdateCommand = "UPDATE Customers1 SET CompanyName = @CompanyName WHERE CustomerID = @CustomerID;" +
                                "UPDATE Customers2 SET CompanyName = @CompanyName WHERE CustomerID = @CustomerID";



このように、;とかで区切ったりして複数のSQLを発行する事は仕様としてありえなくはないなぁ、と思ったりしました。
データプロバイダによってはできるかもなあと。勿論、そこまでの知識はないのでレスしなかったのですが。



私もC#は素人同然なので出来るかどうかは分からなくて申し訳ないですが
SQL投げてるんだから出来そうな気がしますよね。
コーディングもハヤさんのような形で
見やすく書いていただければ問題ないのではないでしょうか?

ただひとつ目のUPDATE文がエラーだった場合や
ステータスを取得したい場合等が問題になりそうですね。
他のSQL文ならハヤさんの言う方法がアクセスも速そうですね。
一度試してみよっと
1

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