2013-04-11 15 views
0

我正在C#中開發一個文件分析器,以便我有一個包含許多行的文件。我想寫到數據庫。使用計數器在c#中批量提交行到數據庫的行

我創建了一個循環,在該循環中讀取文件併發出插入。

但是,我想要做的就是讀100行,然後提交所有100行,然後讀取下100行,然後提交它們等等。

我的問題(有點概念)是如何找出最後的行集作爲可能低於100

對於例如如果我的文件有550行,我可以讀取5個100的數據塊,並使用行計數器上的模數運算符來提交它們,但是最後一批50個數據會發生什麼?

在這方面的任何想法將不勝感激。

謝謝。

回答

0

這裏頂過我的腦海:

第一個選項,做「\ n」的快速計數,從而獲得行數。然後,以2的倍數讀取塊,使得結果非常接近行數,例如,如果存在501行,則讀取250和250的塊。然後僅剩下1行。當你第一次運行代碼時,檢查奇數或偶數。如果奇怪,記得提交最後一行,否則如果行數是偶數,則不需要補償最後一行。希望這可以幫助。

PS:劃分成數是2的倍數後,如果是非常大的,您可以進一步分爲2(分而治之!)

0

如果你讀的函數返回false,如果沒有別的讀書。 然後你可以試試這個。

int i = 1; 
while (read()) 
{ 
    if (i % 100 == 0) 
    { 
     for int (j = 0; j < 100; j++) 
     { 
      write(); 
     } 
    } 
    i++; 
} 
for (int j = 0; j < i % 100; j++) 
{ 
    write(); 
} 
0

可能是這樣的事情嗎?以下是僞代碼:

int rowCount = 0; 
while more records to read 
{ 
    // Get record 
    // Parse record 
    // Do something with results 

    if(++rowCount % 100 == 0) 
    { 
     // Commit 
     rowCount = 0; 
    } 
} 
// If you have 0 records, you just did a commit (unless you had zero records to read, 
// but I assume you can code your way around that!) So you only need a final commit 
// if you had more than 0 records still uncommitted. 

if(rowCount > 0) 
{ 
    // Commit remaining records 
}