- ベストアンサー
排他制御の仕方
お世話になります。 ActiveServerPagesにおいて、データベースに登録する時、同時に書き込みさせない様にロックをかけたいのですが、どうすればよろしいでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>Application("lock") = True はどういった意味なのでしょうか? 手元の環境(Windows2000 Pro+IIS5+SP・Hotfixフル適用)では Application.Lockの時点でロックがかかっているようですが、 Application("変数") = 値 を実行した時点で始めてロックがかかるという話も聞いているので、念のために記述してあります。 >また、この意味はアプリケーション変数をロックすることにより、現在のセッションをロックするということなのでしょうか? アプリケーション変数はロックされますが、セッションはロックされませんし、セッション自体にロックの概念がありません。 理由は同一セッションに同時に複数のアクセスが発生しないため、ロックする必要がないからです。 以上、参考になれば幸いです。
その他の回答 (2)
- hershe
- ベストアンサー率55% (5/9)
こんにちわ。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)
こういうことでしょうか?↓ Application.Lock Application("lock") = True '--- データベース書き込み処理 Application.UnLock
補足
Application("lock") = True はどういった意味なのでしょうか? また、この意味はアプリケーション変数をロックすることにより、現在のセッションをロックするということなのでしょうか?