C#Excel导入多条数据到数据库,怎么解决性能问题可以快速导入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#Excel导入多条数据到数据库,怎么解决性能问题可以快速导入相关的知识,希望对你有一定的参考价值。

因为数据庞大,我现在做的一个把数据先读,放到一个dt里面,然后循环导入。但是有一个节点的数据导入很慢,因为他涉及到多张外键表去查询外键然后,然后再导入

public static DataSet GetDataSet(string FilePath)

string OledbConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + FilePath + "';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
OleDbConnection conn = new OleDbConnection(OledbConnectionString);
ArrayList SheetNameList = new ArrayList();
try

if (conn.State == ConnectionState.Closed)

conn.Open();

DataTable dtExcelSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] null, null, null, "TABLE" );
string SheetName = "";
for (int i = 0; i < dtExcelSchema.Rows.Count; i++)

SheetName = dtExcelSchema.Rows[i]["TABLE_NAME"].ToString();
SheetNameList.Add(SheetName);


catch (Exception ex)

throw ex;

finally

conn.Close();

DataSet dsExcel = new DataSet(); try

string strSql = ""; for (int i = 0; i < SheetNameList.Count; i++)

strSql = "select * from [" + (string)SheetNameList[i] + "]";
OleDbDataAdapter oleExcelDataAdapter = new OleDbDataAdapter(strSql, conn);
DataTable dtExcel = new DataTable((string)SheetNameList[i]);
oleExcelDataAdapter.Fill(dtExcel);
dsExcel.Tables.Add(dtExcel);

return dsExcel;

catch (Exception ex)

throw ex;

这个方法就是从EXCEL文件读取数据转换为DataSet 下面一段时调用的时候要注意的,写要在服务器端保存一下上传的EXCEL,然后再调用 string filePath = "";
DataSet ds = new DataSet();
if (System.IO.Path.GetExtension(FileUpload1.FileName) != ".xls")

ClientScript.RegisterStartupScript(Page.GetType(), "", "<script>alter('hao')</script>");
return;

else

filePath = "D:\\" + FileUpload1.FileName;
FileUpload1.SaveAs(filePath);
string fileName = FileUpload1.FileName;
int start = fileName.IndexOf('.');
fileName = fileName.Substring(0, start);
ds = GetDataSet(filePath);
参考技术A 你优化下SQL。对于excel生成的数据,如果没有什么好方法进行控制,那么原始生成的dt就要做好控制,不相关的数据一律CUT,外键查询的数据如果有可能的话,尽量放在一个临时表中,提前抽取好,C#中对于大数据量进行FOR循环是可以的,但是不要嵌套,超过2层就会相当慢,因为你要读取数据库和excel表格,工作量相当大。所以前期的DT一定要准备好,尽量一个FOR搞定。本回答被提问者和网友采纳 参考技术B 在我做的那么多Excel导入问题当中,都是按条读取Excel中的数据,然后插入到数据库中。一般情况下,没有多大的性能问题。 参考技术C 你可以考虑批次提交,不要针对没一条数据都进行提交。

怎么把C语言中产生的数据导入到Excel表格

1、C语言产生ASCII数据文件,使用空格做作为数据分隔符。
2、进入Excel,选择数据选项卡 / 获取外部数据工具组 / 自文本按钮
3、进入数据导入对话框,
在第一步中,选择使用数据分隔符(不选固定数据长度)
在第二步中,指定数据分隔符为空格
4、按对话框向导操作就可以达到目的啦。
参考技术A Excel表格可以用TAB分隔的列,回车分隔的行的文本文件。
因此,最简单的办法是输出以TAB和回车分隔的文本文件就可以了(文件以.xls命名)。本回答被提问者采纳

以上是关于C#Excel导入多条数据到数据库,怎么解决性能问题可以快速导入的主要内容,如果未能解决你的问题,请参考以下文章

怎么把C语言中产生的数据导入到Excel表格

C#Winform怎么将excel一列数据导入程序中

SSIS导入SQL数据时无法导入出现警告

阿里云导入Excel数据提示有脏数据,怎么解决?

excel怎么导入到arcgis?

c# WINFORM 导入EXCEL数据覆盖问题