0

C# .NET 2.0 で作成された小さなコンソール アプリケーションがあります。アプリケーションはデータベースにクエリを実行し、一定量の ID 番号を取得します。これにより、Web サービスをアドレス指定し、ID 番号に従っていくつかの「ステータス」を取得します。次に、ステータスがデータベースに書き戻されます。プロセス全体を通じて、データベースへの接続を開いたままにしますが、アプリケーションがデータベース エンジンをブロックし、他のクライアントが適切に動作しない限り、これがバッチ処理に最適な方法であるかどうかはわかりません。操作ごとに接続を開いたり閉じたりするのも賢明ではないようです。

これらのバッチ プロセスを処理するための最良の方法と考えられるものは何ですか?

4

2 に答える 2

1

If you have loads of ids and want to update them all in a one go (a batch)、2 つの CSV 文字列を形成し、それらをパラメーターとしてストアド プロシージャ (sp) に渡すことができます。

また、sp内のこれらのCSVを分割し(ここにいくつかあります)、テーブルを更新する関数が必要です。

元;

//Make sure you have a relation between id and statusid here. i.e. same index
string csvIds = "101,2234,349,..."; //CSV for ids
string csvStatusIds = ="1,2,3,..."; //CSV for statusIds

//Pass above csv lists to the following stored procedure...

//Create a stored procedure to pass above ids.    
CREATE PROCEDURE [dbo].[updateStatuses] 

    @Ids VARCHAR(Max),
    @StatusIds VARCHAR(Max)

AS
BEGIN
     DECLARE @tblIds TABLE (key1 INT IDENTITY(1,1), myId INT)
     DECLARE @tblStatusIds TABLE (key2 INT IDENTITY(1,1), myStatusId INT)

     INSERT INTO @tblIds
        SELECT ITEMS FROM dbo.Split(@Ids,',')
     INSERT INTO @tblStatusIds
        SELECT ITEMS FROM dbo.Split(@StatusIds,',')

     --//Do your status update here
     UPDATE yt.statusId = s.myStatusId
     FROM [YourTable] yt JOIN @tblIds i 
                ON yt.id = i.myId JOIN @tblStatusIds s
                ON i.key1 = s.key2

END
于 2012-11-26T10:32:53.997 に答える
0

バッチ挿入/読み取りを自分で実装してみることができますが、驚くべきことに、これはNHiberateが得意なところです。比較的少量の作業であり、利益が信じられないほどになる可能性があるため、設定して試してみることをお勧めします。

于 2012-11-26T10:19:12.687 に答える