我有一个用C#.NET 2.0编写的小型控制台应用程序。 应用程序查询数据库并获取一定数量的id号,然后根据id号码查询Web服务并获取一些“状态”。 然后将状态写回数据库。 通过整个过程,我保持与数据库的开放连接,只要应用程序阻止数据库引擎并且其他客户端无法正常工作,我不确定这是批处理的最佳方式。 打开和关闭每个操作的连接似乎也不太明智。
什么被认为是处理这些批处理过程的最佳方式?
答案 0 :(得分:1)
If you have loads of ids and want to update them all in a one go (a batch)
,您可以形成两个CSV字符串并将它们作为参数传递给存储过程(sp)。
此外,您还需要一个功能来拆分(Here are a few)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
答案 1 :(得分:0)
您可以尝试自己实施批量插入/读取,但令人惊讶的是,这是NHiberate擅长的地方。我建议设置它并尝试,因为它的工作量相对较小,并且增益可能令人难以置信。