在c#中使用计数器批量提交行到数据库
本文关键字:提交 数据库 计数器 | 更新日期: 2023-09-27 18:08:56
我正在c#中开发一个文件解析器,这样我就有了一个具有许多行的文件。我想把它写入数据库
我创建了一个循环,在这个循环中读取文件并发出插入操作。
然而,我想做的是读100行然后提交所有100行,然后读下100行并提交,等等。
我的问题(有点概念性)是如何找出最后一组行,因为它可能小于100。
例如,如果我的文件有550行,我可以读取5块100并使用行计数器上的模数运算符提交它们,但是最后一批50会发生什么?
在这方面的任何意见都将非常感谢。
谢谢。
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
}