在c#中使用计数器批量提交行到数据库

本文关键字:提交 数据库 计数器 | 更新日期: 2023-09-27 18:08:56

我正在c#中开发一个文件解析器,这样我就有了一个具有许多行的文件。我想把它写入数据库

我创建了一个循环,在这个循环中读取文件并发出插入操作。

然而,我想做的是读100行然后提交所有100行,然后读下100行并提交,等等。

我的问题(有点概念性)是如何找出最后一组行,因为它可能小于100。

例如,如果我的文件有550行,我可以读取5块100并使用行计数器上的模数运算符提交它们,但是最后一批50会发生什么?

在这方面的任何意见都将非常感谢。

谢谢。

在c#中使用计数器批量提交行到数据库

Top off my mind:

第一个选项,快速计数''n',从而得到行数。然后,以2的倍数读取块,使结果非常接近行数,例如,如果存在501行,则读取250和250的块。这样就只剩下1行了。当您第一次运行代码时,检查奇数或偶数。如果是奇数,记得提交最后一行,否则如果行数是偶数,则不需要补偿最后一行。希望对你有帮助。

p。S:数除以2的倍数后,如果非常大,还可以再除以2(分而治之!)

如果您的read函数在没有其他内容可读时返回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();
}

也许是这样的?下面是伪代码:

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
}