C# 如何将大量数据加载到DataTable
我正在将数据从Excel导出到DataTable,但当我的Excel文件包含大量行时,我会遇到一些性能问题C# 如何将大量数据加载到DataTable,c#,.net,excel,office-interop,C#,.net,Excel,Office Interop,我正在将数据从Excel导出到DataTable,但当我的Excel文件包含大量行时,我会遇到一些性能问题 public DataView LoadFromExcel() { Microsoft.Office.Interop.Excel.Application application = new Microsoft.Office.Interop.Excel.Application(); Workbook workbook =
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;
}
public DataView LoadFromExcel()
{
Microsoft.Office.Interop.Excel.Application应用程序=
新的Microsoft.Office.Interop.Excel.Application();
工作簿=空;
工作表=空;
字符串文件名=null;
OpenFileDialog文件=新建OpenFileDialog();
if(true==file.ShowDialog())
{
filename=file.filename;
}
工作簿=application.Workbooks.Open(文件名,true,true);
工作表=工作簿。工作表[1];
范围=工作表.UsedRange;
int row=range.Rows.Count;
int columns=range.columns.Count;
System.Data.DataTable dt=新的System.Data.DataTable();
对于(int i=1;i尝试读取变量的值,并进行一些筛选,以避免发送可能影响数据库的错误值。
将未知数据保存到数据库(尤其是MS SQL)是错误的-请执行一些筛选以使保存更容易并保持数据库运行状况。您可以在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();
你必须注意以下几件事:
工作表的名称应为Sheet1或在查询中提供正确的名称
阅读工作表时,工作表不应打开
应在查询中正确定义列名
列名应位于工作表的第一行
我希望它能帮助你。。。
如果您还需要什么,请告诉我……:)您可以使用Sql大容量复制来执行此类操作。我认为这不是正确的方法
要向表中插入大量数据,应使用数据库的“大容量插入”功能,在大容量插入过程中,应关闭数据库日志和回滚功能。否则,大容量插入将像一堆普通插入一样工作
我知道Oracle和SQL Server有此功能,一些NoSQL数据库也有此功能。因为您没有提到什么是您的数据库,所以可以用谷歌搜索它。您不必一次将所有记录加载到内存!反应式扩展(Rx)可能有助于流式传输数据,当读取记录时,您只需订阅该记录并在运行时处理它。使用互操作很慢。您最好看看在不使用它的情况下读取excel文件的.Net库。(Flexcel,Gembox,有一个)。