2012-05-15 3 views
0

비접촉식 카드 제어 및 기록에 사용되는 응용 프로그램을 만들었습니다. 카드를 리더기에 대고 누르면, 응용 프로그램에서 카드 일련 번호를 기록하고 (일련 번호를 읽으면 카드가 제대로 작동 함) 로컬 SQL 데이터베이스에 저장합니다.SQL 데이터베이스에서 중복 제어

이 모든 문제는 해결할 수없는 오류가 있습니다. 동일한 카드가 읽혀지면 그 특정 카드가 이미 기록되었음을 나타내는 예외가 던져 질 수 있도록 일련 번호 열을 기본 키로 표시했습니다.

계속 발생하는 기이 한 일은이 예외가 매 6 회 (매번) 정확히 throw 된 다음 나타나는 것을 멈추고 중복 카드가 정상적인 것으로 기록된다는 것입니다. 이 문제의 원인은 무엇이며 입력을 제어하고 사용자에게 중복에 대해 경고하는 다른 방법이 있습니다.

VS 2010 및 SQL Server 2005에서 응용 프로그램을 만드는 데 C#을 사용하면 어떻게 해결할 수 있습니까?

+0

중복 키의 값이 정말로 중복 되었습니까? 숨겨진 공백이나 잘못 식별 된 번호는 없습니까? – mmcdole

+0

예, 카드 내부에 칩을 만드는 과정에서 일련 번호가 지정됩니다. – NDraskovic

+1

이 응용 프로그램에서 대기열을 사용하고있을 가능성이 있습니까? 숫자 "6"은 대기열이 더러운 항목에 대해 사용하는 재시도 횟수를 나타냅니다. –

답변

2

나는 중복을 확인 삽입 휴식을 할 수있는 정말 좋은 생각이 아니다 그

에 당신에게 다른 aproach를 제안합니다.

그냥 선택하기 전에 복제본을 확인하고 문제가 해결되어야합니다. 나는 당신이 추천 무슨 광대 제안을 바탕으로

+0

그 응용 프로그램을 크게 느리게하지 않겠습니까? 우리는 여기에 수천 개의 카드에 대해 말하고 있습니다. – NDraskovic

+1

그 필드에 클러스터 된 인덱스가 있다면 잘하면 레코드의 수십억에 도달 할 때까지 그렇게 중요하지 않습니다. 그리고 어쨌든 서버는 그 필드를 확인해야합니다 :) – Jester

+0

동의. 데이터에 데이터를 입력하기 전에 데이터가 존재하는지 확인하는 것이 훨씬 더 효율적입니다. – Purplegoldfish

0

데이터가 먼저 검사를 존재하는 경우 저장 프로 시저를 만드는 것입니다 더 후 다음 BIT 1.

의 데이터를 삽입하고 반환하는 경우 예 다음 BIT 0을 반환하지 않는 경우 코드 숨김에서 이것을 호출하고 결과를 확인할 수 있습니다. 참 값은 데이터가 삽입되었음을 의미하고, 거짓 값은 이미 존재 함을 의미합니다.

이렇게하면 응용 프로그램이 예외를 throw하는 것을 줄이고 일반적으로 오류가 발생하지 않도록 프로그램 구조를보다 견고하게 만듭니다.

삽입하기 전에 데이터가 존재하는지 확인하여 테이블의 색인이 제대로 작성되면 성능에 영향을주지 않아야합니다.