各位大神,小弟目前遇到一个问题不知如何处理,希望大神能指导,谢谢!问题是这样,现在我要做一个EXCEL文件上传功能并将EXCEL数据存库,Excel文件分块上传已经解决,EXCEL分段获取数据并存库如何实现,网上查找了好多资料还是没能解决,一次性读取EXCEL的话容易溢出而且很慢,如果能在上传的流中提取数据更好,但是不知道如何实现,所以只能退而求其次,想分段获取EXCEL中的数据并保存,因为上传过程中可能会断网,所以存库的数据要能续传,因为EXCEL数据没有ID,开发工具是VS2015,数据库是SQL2012,能贴出代码更好,小弟水平有限,有思路也不一定会实现,很着急,希望各位大神不吝赐教,谢谢!没有园豆很抱歉
odbc连excel,然后拿datareader去读
你好,有实际代码可以参考么?我的读取代码
public static DataSet ExcelToDataSet(string sheetname, string TSql)
{
DataSet excelDs;
try
{
string strCon = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 8.0; HDR=YES; IMEX=1';Data Source={0}", sheetname);
using (OleDbConnection OleConn = new OleDbConnection(strCon))
{
OleConn.Open();
OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(TSql, OleConn);
excelDs = new DataSet();
OleDaExcel.Fill(excelDs, sheetname);
OleConn.Close();
}
}
catch (Exception exc)
{
throw exc;
}
return excelDs;
},怎么循环去设置string TSql = "SELECT * FROM [" + tableName + "] ",谢谢!
感谢大神,虽然我没能弄出想要的效果,但是我找到了一个方法替换,可以获取到所有数据,50多万行耗时几秒钟,谢谢!,http://www.cnblogs.com/hello20xx/diary/2017/03/19/6581220.html
@不必太在乎: 什么方法,我很好奇,可以分享下不?
@不必太在乎: 您好,可以分享一下您的方法吗,我最近也遇到了这个难题,希望寻求帮助
@Qinglang007:
1.VS的程序包管理器控制台运行:
PM>install-Package ExcelDataReader
2.找到Excel.dll并在项目中引用,读取测试代码:
using Excel;
DateTime beforDT = System.DateTime.Now;
string filePath = @"C:\Users\Administrator\Desktop\工作\XXXXX.xlsx";
FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
excelReader.IsFirstRowAsColumnNames = true;
//放到Dataset耗时比较久
//DataSet result = excelReader.AsDataSet();
while (excelReader.Read())
{
//解析数据
}
DateTime afterDT = System.DateTime.Now;
TimeSpan ts = afterDT.Subtract(beforDT);
//int len = result.Tables[0].Rows.Count;
excelReader.Close();
@不必太在乎: 好的,已经在使用中了,没报错,也很快读取到数据了,谢谢博主哦,赞,但是有个小疑问,excelReader.IsFirstRowAsColumnNames = true; 这句好像不对哦
@Qinglang007: 不客气,这些方法可以根据需要调整的,只要能读出数据就行
可以采用NPOI去读取excel
https://github.com/tonyqus/npoi
你好,谢谢,我试过了,但是只能一次性读取一个sheet,数据量大所以很慢,而且经常报异常