簡體   English   中英

Bulkinsert從CSV到db(C#)-> Web應用程序中的最大行數?

[英]Bulkinsert from CSV into db (C#) -> max number of rows in a web application?

Web應用程序-C#、. Net,SQL 2k5。 我最近在另一個應用程序上使用了bullkinsert,我想嘗試一下。

我將收到一個包含1000行的CSV文件,這很可能會在數據庫中添加50萬(即五十萬)條記錄。 我還不知道這筆巨款是否能順利解決。 恐怕它會超時。

我還沒有做任何測試,但是我很確定它最終會超時。

有沒有一種方法可以使它不超時(我不知道...將bulkinsert分成1000個:D),或者我應該嘗試通過SQL作業來執行類似BCP的操作...

我最近使用c#和SqlBulkCopy類開發了少量批量插入功能。 為了避免頁面超時,我使用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服務調用中處理文件。

  1. 創建一個上載操作以接受文件並將其保存在某個位置,並創建一個GetProgress操作以允許客戶端在必要時檢查加載進度/重試。
  2. 創建一個將執行實際工作的后台進程,例如Windows服務。

-要么-

如果創建WF / WCF工作流服務,您可以一口氣完成這兩項工作,該服務可以像Web服務一樣直接在IIS中托管,但是它可以執行多種操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM