• ベストアンサー

排他制御の仕方

お世話になります。 ActiveServerPagesにおいて、データベースに登録する時、同時に書き込みさせない様にロックをかけたいのですが、どうすればよろしいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • hequil
  • ベストアンサー率65% (242/372)
回答No.3

>Application("lock") = True はどういった意味なのでしょうか? 手元の環境(Windows2000 Pro+IIS5+SP・Hotfixフル適用)では Application.Lockの時点でロックがかかっているようですが、 Application("変数") = 値 を実行した時点で始めてロックがかかるという話も聞いているので、念のために記述してあります。 >また、この意味はアプリケーション変数をロックすることにより、現在のセッションをロックするということなのでしょうか? アプリケーション変数はロックされますが、セッションはロックされませんし、セッション自体にロックの概念がありません。 理由は同一セッションに同時に複数のアクセスが発生しないため、ロックする必要がないからです。 以上、参考になれば幸いです。

その他の回答 (2)

  • hershe
  • ベストアンサー率55% (5/9)
回答No.2

こんにちわ。hersheといいます。 DB更新処理の排他制御はトランザクションを使うことによって実現できます。 ASPでは、ページ単位のトランザクションがサポートされていますので ASPソースの一番上に <%@TRANSACTION=REQUIRED Language=VBScript %> と記述して下さい。 そのページにトランザクションがかかります。 DB登録終了後に、コミットまたはロールバック処理を行なってください。 '*** サンプル *** <%@TRANSACTION=REQUIRED Language=VBScript %> <%   Option Explicit   On Error Resume Next   -- DB登録処理 --   'エラー判定   If Err.Number = 0 Then     'コミット     ObjectContext.SetComplete   Else     'エラーの場合、ロールバック     ObjectContext.SetAbort   End If %>

  • hequil
  • ベストアンサー率65% (242/372)
回答No.1

こういうことでしょうか?↓ Application.Lock Application("lock") = True '--- データベース書き込み処理 Application.UnLock

superstar
質問者

補足

Application("lock") = True はどういった意味なのでしょうか? また、この意味はアプリケーション変数をロックすることにより、現在のセッションをロックするということなのでしょうか?

関連するQ&A