0

database(reading & fill data from a )を作成しましたXML。でこれを行いましたSqlBulkCopy。しかし、シナリオは XML が更新されるたびに (新しいレコードが挿入されたか、既存のレコードが変更された可能性があります) ...したがって、データベースも更新する必要があるため、最初にすべてのテーブルのすべてのレコードを更新する必要があるソリューションを作成しましたデータベースで削除され、再度 を実行するSqlBulkCopyと、データが更新されます......

しかし、それは非常に最悪の方法のようです。

ソースXMLに新しいレコードがある場合に新しいレコードを挿入するだけでなく、これらのレコードのみを更新する方法はありますか?

データセットのマージ操作もいくつか試しましたが、正しい使い方がわかりませんでした。

4

1 に答える 1

1

これを試して:

xmlをクラスオブジェクトにシリアル化します-このクラスオブジェクトのコレクションとして追加できますList<object>次に、 C#ストアドプロシージャ呼び出しを介して、xmlの一意のID(現在はシリアル化されたレコード)を渡しコレクションをループして、ストアドプロシージャを使用して各IDを照合できます。xmlからのレコードが多すぎない場合、これはパフォーマンスに影響を与える可能性があります。

ストアドプロシージャで。を実行しIF SELECT Count(*)... > 0ます。0より大きい値を返す場合、レコードは存在します。

IF(SELECT COUNT(*) FROM table where uniqueid = @id) > 0)
BEGIN
    UPDATE table ... WHERE uniqueid = @id
END
ELSE
BEGIN
   INSERT INTO table (...) VALUES(...)
END 

代わりに、MERGE INTOそれを利用することも素晴らしいです。

データベースが正常に更新されたことを示すために、ストアドプロシージャが値またはboolenを返すようにします。

于 2013-03-14T07:27:53.167 に答える