请教excel表的问题

okcat 2017-07-25 03:14:57
用打开数据的方式打开excel表,并存到datatable中,代码如下:

//类
public class classexcel
{
public DataTable getdatatable_excel(string excel_name)
{
string sheet_name;
//以打开数据库的方式打开EXCEL表
string strCon = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + excel_name + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";
OleDbConnection con = new OleDbConnection(strCon);
con.Open();
//获得EXCEL表的第一个SHEET名称
sheet_name = con.GetSchema("tables").Rows[0]["TABLE_NAME"].ToString().ToLower();

//得到EXCEL表的数据,保存为datatable
OleDbDataAdapter da = new OleDbDataAdapter("select * from [" + sheet_name + "]", con);
DataSet ds = new DataSet();
da.Fill(ds);
DataTable dt= ds.Tables[0];
return dt;
}
}

//将用户选择的文件保存到服务器端
fn = System.IO.Path.GetFileName(uploadFile.PostedFile.FileName);
file_path = Server.MapPath("files/") + fn;
uploadFile.PostedFile.SaveAs(file_path);

//实例化该类,打开excel表,并对该表进行操作
classexcel myexcel = new classexcel();
dt = myexcel.getdatatable_excel(file_path);



对该表进行操作时出现报错。终止该网页,再次将用户选择的文件保存到服务器端时,由于上次操作时出错没有关闭EXCEL表,所以提示 :文件“E:\djsxzb\files\信息物流中心检斤党支部执行力指数指标任务.xls”正由另一进程使用,因此该进程无法访问此文件。报错位置指向该句:uploadFile.PostedFile.SaveAs(file_path)

求教怎样在操作EXCEL出错时关闭它。是以数据库方式打开并存入DATATABLE.
...全文
183 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Nick_Ngai 2017-07-28
  • 打赏
  • 举报
回复
da.Fill(ds); con.Close(); DataTable dt= ds.Tables[0];
闲游四疯 2017-07-26
  • 打赏
  • 举报
回复
getdatatable_excel 里面 conn 没有关闭吧
班门弄武 2017-07-26
  • 打赏
  • 举报
回复
上传到服务器后文件名用GUID.
shoppo0505 2017-07-25
  • 打赏
  • 举报
回复
引用 楼主 okcat 的回复:
用打开数据的方式打开excel表,并存到datatable中,代码如下: //类 public class classexcel { public DataTable getdatatable_excel(string excel_name) { string sheet_name; //以打开数据库的方式打开EXCEL表 string strCon = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + excel_name + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'"; OleDbConnection con = new OleDbConnection(strCon); con.Open(); //获得EXCEL表的第一个SHEET名称 sheet_name = con.GetSchema("tables").Rows[0]["TABLE_NAME"].ToString().ToLower(); //得到EXCEL表的数据,保存为datatable OleDbDataAdapter da = new OleDbDataAdapter("select * from [" + sheet_name + "]", con); DataSet ds = new DataSet(); da.Fill(ds); DataTable dt= ds.Tables[0]; return dt; } } //将用户选择的文件保存到服务器端 fn = System.IO.Path.GetFileName(uploadFile.PostedFile.FileName); file_path = Server.MapPath("files/") + fn; uploadFile.PostedFile.SaveAs(file_path); //实例化该类,打开excel表,并对该表进行操作 classexcel myexcel = new classexcel(); dt = myexcel.getdatatable_excel(file_path); 对该表进行操作时出现报错。终止该网页,再次将用户选择的文件保存到服务器端时,由于上次操作时出错没有关闭EXCEL表,所以提示 :文件“E:\djsxzb\files\信息物流中心检斤党支部执行力指数指标任务.xls”正由另一进程使用,因此该进程无法访问此文件。报错位置指向该句:uploadFile.PostedFile.SaveAs(file_path) 求教怎样在操作EXCEL出错时关闭它。是以数据库方式打开并存入DATATABLE.
前段时间也遇到了相同问题,没有解决。感觉这条路走不通。 不过uploadfile控件有个filestream(好像是这个,好像是uoloadstream),这个属性可以使用。

62,253

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧