Web 应用程序 - C#、.Net、SQL 2k5。我最近在另一个应用程序上使用了 bulkinsert,我想尝试一下。
我将收到一个包含 1000 行的 CSV 文件,它很可能会在数据库中添加 500 000 条(即 50 万条)记录。我还不知道这笔巨额资金能否顺利进行。我怕它会超时。
我还没有做任何测试,但我很确定它最终会超时。
有没有办法让它不超时(我不知道......将bulkinsert分成1000块:D)或者我应该尝试用SQL作业做一些像BCP这样的事情......
Web 应用程序 - C#、.Net、SQL 2k5。我最近在另一个应用程序上使用了 bulkinsert,我想尝试一下。
我将收到一个包含 1000 行的 CSV 文件,它很可能会在数据库中添加 500 000 条(即 50 万条)记录。我还不知道这笔巨额资金能否顺利进行。我怕它会超时。
我还没有做任何测试,但我很确定它最终会超时。
有没有办法让它不超时(我不知道......将bulkinsert分成1000块:D)或者我应该尝试用SQL作业做一些像BCP这样的事情......
我最近使用 c# 和 SqlBulkCopy 类开发了类似的 bulkinsert 功能。为了避免页面超时,我使用 ThreadPool(ThreadPool.QueueUserWorkItem 方法)进行了异步处理。使用新的连接对象将上传状态添加到日志表中,以避免日志事务回滚。然后使用上传历史页面在网站中报告此状态。
最好的解决方案是创建一个使用 BulkInsert 命令的过程。这是proc的示例代码:
CREATE PROCEDURE [dbo].[usp_ExecuteBulkInsertTask]
(
@dataFile VARCHAR(255),
@bulkInsertFormatFile VARCHAR(255),
@tableName VARCHAR(255)
)
AS
BEGIN
BEGIN TRY
DECLARE @SQL Varchar(4000)
SET @SQL = 'BULK INSERT ' + @tableName + ' FROM ''' + @dataFile + ''' WITH (formatfile=''' + @bulkInsertFormatFile + ''', FIRSTROW=2)'
EXEC sp_sqlexec @SQL
END TRY
BEGIN CATCH
--error handling
END CATCH
END
实际上,拆分插入似乎是个好主意。我会使用更大的块,比如 5000 块或更多。
我建议您不要尝试在单个 Web 服务调用中处理该文件。
-或者-
如果您创建一个 WF/WCF 工作流服务,您可以一口气完成这两项工作,您可以像 Web 服务一样直接在 IIS 中托管该服务,但它可以执行多个操作。