代码之家  ›  专栏  ›  技术社区  ›  Ash

bulkinsert from csv into db(c)—>web应用程序中的最大行数?

  •  0
  • Ash  · 技术社区  · 15 年前

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

    我将收到一个包含1000行的csv文件,它很可能会在数据库中添加50万条(即50万条)记录。 我还不知道这么大一笔钱能否成功。恐怕会超时的。

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

    有没有办法让它不超时(我不知道…将bulkinsert分成1000个部分:d)或者我应该尝试使用一个sql作业来执行bcp之类的操作……

    3 回复  |  直到 15 年前
        1
  •  1
  •   Amit Rai Sharma    15 年前

    我最近使用c和sqlbulkcopy类开发了smiliar bulkinsert功能。为了避免页面超时,我使用threadpool(threadpool.queueuserworkitem方法)进行了异步处理。上载状态将使用新的连接对象添加到日志表中,以避免日志的事务回滚。然后使用上载历史页面在网站中报告此状态。

    最好的解决方案是创建一个使用bulkinsert命令的过程。以下是过程的示例代码:

    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
    
        2
  •  0
  •   Daniel Dolz    15 年前

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

        3
  •  0
  •   Doobi    15 年前

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

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

    -或

    如果创建wf/wcf工作流服务,您可以一次完成这两项工作,您可以像web服务一样直接在iis中托管工作流服务,但它可以执行多个操作。

    推荐文章