0

1 つのデスクトップ ベースのアプリケーションを開発しています。そのアプリケーションでは、データベースに保存/更新するために変更された行のみを取得する必要があります。そのために、次のコードを使用しました。

DataTable modifiedTable = dt.GetChanges(DataRowState.Modified);

それはいいです。しかし、ここでは、変更された列のみが必要です。変更のない列は必要ありません。したがって、元の値と変更された/新しい値をログに記録できます。(ms sql の変更データ キャプチャ (CDC) のようなフェッチャー)。

どうすればいいですか?

4

1 に答える 1

0

OriginalValue と DataRow 列の値の現在のバージョンを使用して、それらが異なるかどうかを確認できます

For Each row in table.Row
    For Each col in table.Columns
       Dim original = row[col.ColumnName] = row[col.ColumnName, DataRowVersion.Original].ToString()
       Dim  changed = row[col.ColumnName] = row[col.ColumnName, DataRowVersion.Current].ToString()

       ' Compare and prepare the SQL command to update only this changed column'
    Next
Next

しかし今、あなたは最大の問題に直面しています。その列のみを更新するコードを自分で記述する必要があります。
(ちなみに、これが SqlDataAdapter と SqlCommandBuilder を使用する理由の 1 つです)

DataRowVersion 列挙型に関する MSDN の記事を参照してください。

于 2013-05-07T12:22:58.380 に答える