2012-02-20 5 views
0

데이터베이스에 대한 기본 CRUD 작업을 허용하는 웹 응용 프로그램을 작성 중입니다. 업데이트되는 테이블에는 200 개 미만의 레코드가 있으며이 응용 프로그램을 사용하는 사용자가 여러 명일 수 있습니다. 두 사용자가 서로 다른 항목을 덮어 쓰지 않도록 일종의 잠금 메커니즘이 필요합니다.데이터 용 세마포어

세마포어를 조사했지만 동일한 코드를 실행하는 사용자 수를 제한하는 것으로 보입니다. 내 데이터 레이어에서 각 테이블에 대한 클래스 파일을 가지고 있으므로 특정 테이블의 클래스 파일에서이를 확실히 사용할 수 있지만 키 필드에 대한 잠금을 어떻게 든 제한 할 수 있습니까?

+0

데이터베이스가 잠금을 지원하지 않습니까? 왜 코드에서 그것을합니까? – Umbrella

+0

나는 그것을 잊어 버리지 않는 한, 사용자 1과 2가 같은 레코드를 웹 페이지 (select query)에로드하는 것을 멈추지 않을 것이고, 각각의 편집과 제출 변경 (update query)은 각각의 변경을 생각하고있다. 최신. – zkent

답변

0

ASP .Net과 함께 적절한 SQL 구현을 사용한다고 가정 할 때 트랜잭션을 사용하여 왜이 작업을 수행하지 않습니까? Check it out here.

또한 optimistic concurrency에서 원하는 내용인지 확인할 수 있습니다. 기본적으로 값을 저장하기 전에 사용자는 특정 필드의 값이 처음 읽었을 때의 값과 같은지 확인합니다. 값이 같으면 아무도 다른 값을 덮어 쓰지 않은 것으로 간주하고 새 값을 DB에 저장합니다. 값이 같지 않으면 대신 경고 메시지가 반환됩니다.

+0

도움이된다면 ODBC를 사용하여 DB2 데이터베이스에 연결하고 있습니다. – zkent

+0

낙관적 동시성 (이전에 그 용어를 듣지 못했다)은 내가 기울이고있는 접근법입니다. 지금은 데이터베이스에서 데이터를 가져 와서 DTO에 넣고 세션 변수에 저장하여 변경 사항을 제출하기 전에 데이터베이스와 다시 비교합니다. – zkent

+0

구성 마법사를 사용하여 TableAdapter를 사용하면 낙관적 인 동시성을 극대화 할 수 있습니다. [http://msdn.microsoft.com/en-us/library/bb404102.aspx] ("낙관적 인 동시성을 지원하는 데이터 액세스 계층 만들기"검색) 사실, 그것은 내장 된 속성입니다. 그러나 처음에는 어댑터를 사용하는 단점이 있습니다. 즉, DB 스키마/SP의 변경 사항이 어댑터에 자동으로 반영되지 않습니다. 그러나 이미 다른 곳에서 사용되고있는 저장 프로 시저 집합이있는 경우 이것이 최선의 방법이라고 생각합니다. :) – Rahul