0

データがデータベースに送信される前に、データの重複をチェックする必要があるという要件があります。

基本的に、列とシートに必要なデータを含む EXCEL ファイルがあります。EXCEL から SQL Server 2008 DB にデータをアップロードする必要があります。

データをアップロードする前に、"Microsoft.Ace.OLEDB.12.0" を使用して EXCEL データを読み込み、WPF Grid を使用してユーザーに表示します - これは正常に機能します。

次のステップは、EXCEL ファイルからロードされたデータを SQL Server DB で使用可能なデータと照合することです。請求書番号と呼ばれるプライマリ列があります。この請求書番号は、要求された商品の出荷が部分的に行われるため、すべての Excel ファイルに分散されます。この特定の請求書のアイテム全体が DB にアップロードされるまで、アップロードされているデータが SQL Server DB にまだ存在していないことを確認する必要があります。

Excel ファイルには複数の列がありますが、いくつかの列に基づいて重複エントリをチェックする必要があります。

ロードされた EXCEL データを .net データテーブルに格納し、SQL Server からデータセットにデータをロードすることを計画しています (これが適切なアプローチであるかどうかはわかりません)。

これを達成するために推奨される良い方法は何ですか。このリンクDuplicacy check between DATABASE and DATATABLEを見たことがありますが、これで私の要件が解決されるかどうかはわかりません。

前もって感謝します。

4

2 に答える 2

0

背景はわかりませんが、SQL Server を使用している場合は、SQL Server Integration Services (SSIS) という優れたユーティリティがあります。これにより、データの移行 (ETL: 抽出-変換-ロードと呼ばれる) が非常に簡単になります。新しいユーティリティを習得する必要があることは承知していますが、SQL Server を使用している場合は、将来的に非常に役立つ可能性があります。

SSIS を使用すると、Excel ファイルをソースとしてワークフローを作成し、データを SQL Server に宛先としてロードできます。次のような結果になります。

ここに画像の説明を入力

于 2013-10-22T06:24:29.623 に答える
0

私は次のいずれかを試します:

SELECT 'Exists' FROM table where id = @itemId --returns string 'Exists' if there is an item

または

SELECT ISNULL(id, '0') FROM table where id = @itemId -- returns '0' if there is an item

または

SELECT ISNULL(id, 0) FROM table where id = @itemId -- returns 0 if there is an item 

複数のテーブルでチェックする必要がある場合は、それらを結合して同じことを行います。

別のアプローチは、リンクで提供したものです。比較する値を SELECT し、それを DataTable に入力してから、次のようにループすることができます。

DataTable dt = new DataTable();
SqlDataAdapter adapt = new SqlDataAdapter("SELECT id FROM table", connection);
adapt.Fill(dt);

for (int i = 0; i < excelDataTable.Rows.Count; i++)
{
    for (int j = 0; j < dt.Rows.Count; j++)
    {
        if (excelDataTable.Rows[i]["col_name"] == dt.Rows[j]["col_name"]) ;
    }
}

そして最後に、これを確認できます:

答えのある別の質問

于 2013-10-22T05:58:02.943 に答える