2010-12-01 20 views
0

ASP.NETを使用して、電子メールアドレスのリストをインポートする機能が必要な管理ツールを構築しています。ファイルをアップロードする際に、提供された電子メールアドレスの既存のレコードを確認したいと思います。存在しない電子メールアドレスについては、私のDAOを使用して作成します。重複をチェックするインポートプロセスの構築

基本的に私がしたい:

  1. は、電子メール
  2. リスト内のすべての電子メールをデシベル
  3. 戻り、完全なデータを新しい電子メールのデータを作成し、既存の電子メール
  4. のためのデータを取得するのリストを受け取ります。

私はアップフロント存在する電子メールのかを知りたいので、私の最初に考えたのは、すべてのレコードWHERE Email IN ('Email001FromFile', 'Email002FromFile', 'etc...')用のテーブルを照会することでしたが、リストには、潜在的に電子メールアドレスの数千人が含まれている可能性があり、私はそれを供給かどうか分かりませんIN演算子に多くの電子メールアドレスが良い考えです。

リストをループして各電子メールのレコードをチェックすることも考えましたが、それは潜在的には多すぎるクエリを生成する可能性があります。

私の次の考えは、リストを保持するための一時テーブルを生成し、明示的な項目リストではなく一時テーブルを使用するようにIN節を変更することでしたが、SQLまたはストアドプロシージャを直接実行する必要があります。私は私のDBにアクセスするためにNHibernateを使用しているので、私はやりたくない。

私はASP.NET(C#)とNHibernateを使用していますが、それに特有の回答が役に立ちますが、このシナリオの処理方法に関する一般的なアイデアを探しています。

+0

ちょうどあなたがNHibernateを使用しているからといって、あなたがストアドプロシージャを使用してしまってはいけません。 SPが最善のアプローチである場合があります。特に、既存のすべてのレコードをメモリに保存する必要がないことが問題の場合は特にそうです。現時点であなたの手に持っているツールだけではなく、その仕事に適したツールを使用してください。 –

+0

これは、使用できるあらゆる種類のツールで1つのトランザクションで時間がかかりすぎませんか?とにかく大量のレコードをインポートするためにはバッチ処理が必要だと思います。 – Paco

答えて

2

既存の電子メールをメモリに読み込むことはオプションではないかもしれませんが、私は多分一種のバッチアプローチに行くでしょう。あなたが言及しているINクエリに行ってください。しかし、それはnのメールのみで行います。特定の値にハードコードすることもできますし、新しい電子メールの総数の関数にすることもできます。

私はこのアプローチが本当に単一のINクエリ(私より多くのdbスキルを持つ人)が実行するよりも速いのかどうかはわかりませんが、何らかの種類の読み込みを示すことができますステータスをユーザに通知する。

0

重複しているメールで何かしていますか?

テーブルにUNIQUE制約を設定すると、電子メールアドレスを1回だけ入力できるようになります。次に、重複を挿入しようとするとSQLがスローする例外をキャッチします。

関連する問題