0

非接触型カードの制御と記録に使用するアプリケーションを作成しました。カードがリーダーに押し付けられると、アプリケーションがカードのシリアル番号を記録し (シリアル番号が読み取られた場合、カードは正常に機能しています)、それをローカルの SQL データベースに保存します。

これはすべて正常に機能しますが、解決できないエラーが 1 つあります。同じカードが読み取られた場合に、その特定のカードが既に記録されていることを示す例外がスローされるように、シリアル番号の列を主キーとしてマークしました。

発生し続ける奇妙なことは、この例外が正確に 6 回 (毎回) スローされた後、表示されなくなり、重複したカードが通常のものとして記録されることです。これを引き起こしているのは何ですか。また、入力を制御し、重複についてユーザーに警告する他の方法はありますか。

VS 2010 および SQL Server 2005 で C# を使用してアプリケーションを作成していますが、これを解決するにはどうすればよいですか?

4

2 に答える 2

2

私はあなたにそれについての別のアプローチを提案します

重複をチェックするためにインサートを中断させるのは、あまり良い考えではありません。

selectで挿入する前に複製をチェックするだけで、問題が解決するはずです。

于 2012-05-15T14:02:41.683 に答える
0

Jesters の提案に基づいて、最初にデータが存在するかどうかを確認し、存在する場合は BIT 0 を返し、存在しない場合はデータを挿入して BIT 1 を返すストアド プロシージャを作成することをお勧めします。

次に、コードビハインドでこれを呼び出して結果を確認できます。true 値はデータが挿入されたことを意味し、false 値はデータが既に存在していたことを意味します。

これにより、アプリケーションが例外などをスローするのを防ぎ、そもそもエラーの発生を許可しないため、一般的にプログラム構造がより強固になります。

テーブルが適切にインデックス化されている場合、挿入を試みる前にデータが存在するかどうかを確認しても、パフォーマンスに影響はありません。

于 2012-05-15T14:20:42.347 に答える