我将数据从Excel导出到DataTable,但是当我的Excel文件包含大量行时,我遇到了一些性能问题......
public DataView LoadFromExcel()
{
Microsoft.Office.Interop.Excel.Application application =
new Microsoft.Office.Interop.Excel.Application();
Workbook workbook = null;
Worksheet worksheet = null;
string filename = null;
OpenFileDialog file = new OpenFileDialog();
if (true == file.ShowDialog())
{
filename = file.FileName;
}
workbook = application.Workbooks.Open(filename, true, true);
worksheet = workbook.Sheets[1];
Range range = worksheet.UsedRange;
int row = range.Rows.Count;
int columns = range.Columns.Count;
System.Data.DataTable dt = new System.Data.DataTable();
for (int i = 1; i <= columns; i++)
{
dt.Columns.Add((range.Cells[1, i] as Range).Value2.ToString());
}
for (row = 2; row <= range.Rows.Count; row++)
{
DataRow dr = dt.NewRow();
for (int column = 1; column <= range.Columns.Count; column++)
{
dr[column - 1] = (range.Cells[row, column] as
Microsoft.Office.Interop.Excel.Range).Value2.ToString();
}
dt.Rows.Add(dr);
dt.AcceptChanges();
}
workbook.Close(true, Missing.Value, Missing.Value);
application.Quit();
return dt.DefaultView;
}
有什么方法可以解决这个问题吗?请帮忙。
答案 0 :(得分:1)
您可以在OLEDb提供商的帮助下完成。我尝试过50000条记录。它可以帮到你,只需尝试下面的代码:
// txtPath.Text is the path to the excel file.
string conString = @"Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + txtPath.Text + ";" + "Extended Properties=" + "\"" + "Excel 12.0;HDR=YES;" + "\"";
OleDbConnection oleCon = new OleDbConnection(conString);
OleDbCommand oleCmd = new OleDbCommand("SELECT field1, field2, field3 FROM [Sheet1$]", oleCon);
DataTable dt = new DataTable();
oleCon.Open();
dt.Load(oleCmd.ExecuteReader());
oleCon.Close();
你必须要处理好一些事情:
我希望它会帮助你...... 如果你需要更多的东西,请告诉我......:)
答案 1 :(得分:1)
您可以使用Sql批量复制来执行此类操作。
答案 2 :(得分:1)
我认为这不是正确的方法。
要将大量数据插入表中,您应使用数据库的“批量插入”功能,在批量插入期间,应关闭数据库日志和回滚功能。否则,批量插入物就像一堆普通的插入物一样。
我知道Oracle和SQL Server具有此功能,并且一些NoSQL数据库也具有此功能。由于您没有提到您的数据库是什么,因此谷歌搜索它会很有帮助。
答案 3 :(得分:-1)
尝试将值读取到变量并执行一些过滤器,以避免发送可能影响数据库的错误值。 将未知数据保存到数据库是错误的,尤其是MS SQL - 进行一些过滤以使保存更容易并保持数据库运行状况。