【发布时间】:2015-11-26 05:30:06
【问题描述】:
我正在制作一个表单,它允许我的用户选择电子表格并将其数据复制到 SQLite 数据库。我的 SQLite 查询是事务,大约在一秒钟内发生,但我的代码部分未正确运行是它在 Excel 范围内循环并创建我的插入语句的地方。它是一个嵌套的 for 循环,在选定范围内的所有列和所有行上运行。运行 360 行 43 列的电子表格的整个过程大约需要 4 分钟。我最初认为它是 SQLite 插入,所以我将其转换为批量插入。一旦我深入研究并逐步执行代码,我意识到这是导致此问题的“for”循环。这是我的代码:
int counter = 1;
string contents = null;
string bulkInsert = null;
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(file);
Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
Excel.Range xlRange = xlWorksheet.UsedRange;
int rowCount = xlRange.Rows.Count;
int colCount = xlRange.Columns.Count;
for (int i = 2; i <= rowCount; i++)
{
for (int j = 1; j <= colCount; j++)
{
contents = contents + Convert.ToString("'" + xlRange.Cells[i, j].Value2) + "',";
//MessageBox.Show(xlRange.Cells[i, j].Value2.ToString());
}
contents = contents.Remove(contents.Length - 1);
bulkInsert = bulkInsert + "INSERT INTO DeferralInput VALUES (" + contents + "); ";
contents = "";
}
bulkInsert = "BEGIN TRANSACTION; " + bulkInsert + " COMMIT;";
xlApp.Quit();
ExecuteQuery(bulkInsert);
如果有人对如何加快速度有任何想法,或者如果我做错了什么,我愿意尝试任何事情。
【问题讨论】:
标签: c# excel sqlite office-interop