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

因为数据庞大,我现在做的一个把数据先读,放到一个dt里面,然后循环导入。但是有一个节点的数据导入很慢,因为他涉及到多张外键表去查询外键然后,然后再导入... 因为数据庞大,我现在做的一个把数据先读,放到一个dt里面,然后循环导入。但是有一个节点的数据导入很慢,因为他涉及到多张外键表去查询外键然后,然后再导入 展开
 我来答
幸运的杨晨晨
推荐于2016-08-15 · TA获得超过2.2万个赞
知道小有建树答主
回答量:1000
采纳率:66%
帮助的人:271万
展开全部
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);
}
一边一半
推荐于2016-11-15 · TA获得超过259个赞
知道小有建树答主
回答量:491
采纳率:0%
帮助的人:356万
展开全部
你优化下SQL。对于excel生成的数据,如果没有什么好方法进行控制,那么原始生成的dt就要做好控制,不相关的数据一律CUT,外键查询的数据如果有可能的话,尽量放在一个临时表中,提前抽取好,C#中对于大数据量进行FOR循环是可以的,但是不要嵌套,超过2层就会相当慢,因为你要读取数据库和excel表格,工作量相当大。所以前期的DT一定要准备好,尽量一个FOR搞定。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
DaemonWang
2012-11-23 · 超过29用户采纳过TA的回答
知道答主
回答量:99
采纳率:0%
帮助的人:49.8万
展开全部
在我做的那么多Excel导入问题当中,都是按条读取Excel中的数据,然后插入到数据库中。一般情况下,没有多大的性能问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友65e669b
2015-04-27 · TA获得超过1946个赞
知道小有建树答主
回答量:1366
采纳率:0%
帮助的人:839万
展开全部
你可以考虑批次提交,不要针对没一条数据都进行提交。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式