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),您可以形成两个 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

您可以尝试自己实现批量插入/读取,但令人惊讶的是,这正是 NIBerate 擅长的地方。我建议设置它并尝试一下,因为它的工作量相对较小,而且收益可能令人难以置信。

于 2012-11-26T10:19:12.687 回答