- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ASPからSQLserverへの重複データ登録)
ASPからSQLserverへの重複データ登録
このQ&Aのポイント
- ASPで作成した画面からSQLserver2005にデータ登録を行う場合に重複データができてしまいます。
- テーブルにはユニークとなる受付番号があり、画面にて登録を行う際に、画面の受付番号がテーブルに存在するかをチェックしてから登録を行っています。
- このような処理の流れの場合で、同一の受付番号のデータが登録されるのは複数端末で同時に登録した場合が考えられます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
原因はたぶん想像されている通りかと。 ASPは本質的に複数の同時接続を扱えるようにしていますから、それに対応できるようなプログラムの記述が必要です。 SELECTしてからAddNewまでを1つのトランザクションとするような記述ができれば問題は解決するかとおもいます。
その他の回答 (1)
- nda23
- ベストアンサー率54% (777/1415)
回答No.1
>複数端末で同一受付番号を同時に登録した場合 ご想像の通りでしょう。 気付いた点を述べますと、先ず、主キーが無いテーブルは レコード数が増えた時に処理効率が悪くなります。 それと、テーブル結合した時の制約も多くなるので、やはり 主キーは設けるべきです。 >SELECTで検索してチェックを行った後 マルチユーザ環境ではあまり意味がありません。 採番テーブルを設けて採番中はロックするのが普通です。 ただ、ロックとその解除は速度が遅いこと、ロック中に障害が あった時に、復旧が難しいDBシステムがあることから、私は 普通のファイル(中身なし)を排他的に開いてミューテックスの ように使用しています。ファイルを開けなかったタスクは数回 リトライするようにします。 ファイルを開けたタスクは「SELECTを使って・・・」をやっても 他のタスクと衝突しないので安心して番号が採れます。 ファイルのOpen/Closeは処理が速く、障害で異常終了しても OSが自動的に閉じてくれるので、復旧の必要はありません。
質問者
お礼
回答ありがとうございます。 テーブルに主キーを設定しないのは顧客からの要望で設定することはできませんでした。 回答内容を参考にプログラムを修正します。
お礼
回答ありがとうございます。 質問後も調べていたのですが、原因は記述した通りしかないようでした。 回答内容を参考にプログラムを修正します。