0

ユーザーが入力するフォーム内に多数のテキストボックスがあり、ユーザーの入力がデータベース内に存在するかどうかを確認したいと考えています。一部の Web サイトが入力時にユーザー名をチェックする方法と同様です。後者のユーザー名がデータベース内に存在する場合、緑色またはチェックボックスでマークされます。

私の場合、ユーザーはフォーム全体に入力する必要があり、各テキスト ボックスはテーブル内の異なる列を表します。値がデータベース内に存在するかどうかを確認する最良の方法は何ですか? ラグが許せないので、最速のアプローチでなければなりません。

これは私が採用することを考えたアプローチです:

ユーザーがデータの入力を開始する前に、データベースに対して SQL クエリが実行され、そのテーブル内のすべてのレコードが取得されます (単純なSELECT * FROM table)。次に、これは に保存されますDataTable

ユーザーがテキストボックスにテキストを入力し終わると (つまり、それぞれのテキストボックスがフォーカスされていない場合)、フォーム内のすべてのテキストボックスがチェックされ、入力がデータベースに存在することが確認されます。LINQこれは、各テキスト ボックスの DataTable に対してステートメントを実行して、値が DataTable に含まれているかどうかを確認することによって実行されます。

このアプローチは機能しますか?できるだけ速くしたいのですが、遅れは許されません。

4

2 に答える 2

2

の行数がtableそれほど大きくない場合は、それが私が使用するアプローチです。
数値が大きすぎてメモリに適切に保持できない場合は、毎回データベースにアクセスする必要があります。
次の最適化を行うことができます。

  1. 検索する必要がある各列にインデックスを追加します。これにより、そのテーブルに行を追加するのに必要な時間が長くなることに注意してください
  2. データベースで実際に変更されたテキスト ボックスのみを検索する
  3. データベースを検索している間、テキスト ボックスの横にある小さなスピナーの形でユーザーに視覚的なフィードバックを提供します。
于 2013-02-20T09:37:28.967 に答える
1

一度にすべてのフィールドをチェックしないことをお勧めします。フィールドがいっぱいになる限り、データを絞り込むアプローチを検討します。

説明させてください。に 10000 件のユーザー レコードがあるとしますDataTable。ユーザーが最初のフィールド (通常は「名」) の入力を完了した後、この列のみを DB でチェックし ( ) 、結果に従ってSELECT users.firstName FROM table更新できます( )。DataTableSELECT * FROM table WHERE firstName like ('%firstNameField%')

データがロードされ、余分な時間を節約できるフィールドに対してのみ実行できます。

あなたがその考えを理解してくれることを願っています:)

于 2013-02-20T09:47:04.953 に答える