0

Web 应用程序 - C#、.Net、SQL 2k5。我最近在另一个应用程序上使用了 bulkinsert,我想尝试一下。

我将收到一个包含 1000 行的 CSV 文件,它很可能会在数据库中添加 500 000 条(即 50 万条)记录。我还不知道这笔巨额资金能否顺利进行。我怕它会超时。

我还没有做任何测试,但我很确定它最终会超时。

有没有办法让它不超时(我不知道......将bulkinsert分成1000块:D)或者我应该尝试用SQL作业做一些像BCP这样的事情......

4

3 回答 3

1

我最近使用 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
于 2010-04-28T15:03:15.163 回答
0

实际上,拆分插入似乎是个好主意。我会使用更大的块,比如 5000 块或更多。

于 2010-04-28T12:43:06.653 回答
0

我建议您不要尝试在单个 Web 服务调用中处理该文件。

  1. 创建一个上传操作以接受文件并将其保存在某处,并创建一个GetProgress操作以允许客户端检查加载进度/在必要时重试。
  2. 创建一个将执行实际工作的后台进程,如 Windows 服务。

-或者-

如果您创建一个 WF/WCF 工作流服务,您可以一口气完成这两项工作,您可以像 Web 服务一样直接在 IIS 中托管该服务,但它可以执行多个操作。

于 2010-04-28T14:46:41.547 回答