0

SqlBulkCopyクラスを使用して、データベースへの一括挿入/更新を行っています。データが挿入/更新された後、それを使ってさらにロジックを実行したいと思います。

現在、私のIDataReaderには、挿入および更新されるレコードが混在しています。データベースに対するすべてのアクションは正しく機能します。ただし、データが書き込まれると、IDataReaderオブジェクトには行がなくなります。

挿入されたレコードに対して自動生成された一意の識別子フィールドを使用して、行を保持する方法はありますか?

これが私のコードのスニペットです:

    public IDataReader DoBulkCopy<T>(List<T> DataToInsert, string DestinationTableName)
    {
        var BulkCopy = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["MyConn"].ConnectionString, SqlBulkCopyOptions.KeepNulls);
        BulkCopy.BulkCopyTimeout = 0;
        BulkCopy.BatchSize = 50;
        BulkCopy.DestinationTableName = DestinationTableName;

        IDataReader reader = DataToInsert.AsDataReader();
        BulkCopy.WriteToServer(reader);
        BulkCopy.Close();

        return reader;
    }

前もって感謝します。

4

1 に答える 1

0

多くの研究の結果、これは不可能であるという結論に達しました。私は回避策を思いつくことができました。私がしたことは、クエリを実行する前に、DateTime.Now()を変数に書き込んだことです。クエリが実行された後、LastUpdatedタイムスタンプフィールドが挿入/更新前に記録されたDateTime変数よりも大きいすべてのレコードに対してselectクエリを実行しました。

このテーブルのデータはこのスケジューラーによってのみ挿入/更新されるため、これは私のシナリオでは正常に機能することに注意してください。これが複数の場所またはユーザーからデータを取得できるアプリである場合、このアプローチを再考または調整する必要があります。

于 2012-12-11T04:26:37.953 に答える