一个EXCEL进程的问题
最近我做一个管理系统,要用到excel的上传功能。要在上传后删除excel文件,我是要做的:
我一个excel文件里面有2个sheet 都要上传
按钮事件我是主要写的:
protected void BtnUpload_Click(object sender, EventArgs e)
{
string fileName = this.FileUpload1.FileName;
string UploadFileName = Request.MapPath(Request.ApplicationPath + "\\ " + System.IO.Path.GetFileName(fileName));
A();
GC.Collect();
System.IO.File.Delete(UploadFileName);
B();
GC.Collect();
System.IO.File.Delete(UploadFileName);
System.GC.Collect();
}
protected voidA()
{
string fileName = this.FileUpload1.FileName;
string UploadFileName = Request.MapPath(Request.ApplicationPath + "\\ " + System.IO.Path.GetFileName(fileName));
this.FileUpload1.PostedFile.SaveAs(UploadFileName);
string ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + UploadFileName + ";Extended Properties=Excel 8.0 ";
string query = "SELECT * FROM [提取物生产信息$] ";
................................
try
{
OleDbConnection oleconn = new OleDbConnection(ConnStr);
oleconn.Open();
OleDbCommand oleCommand = new OleDbCommand(query, oleconn);
OleDbDataReader rdr;
rdr = oleCommand.ExecuteReader();
if (rdr.Read())//多读一行 可在EXCEL里面加一行
{
SqlConnection conn = new SqlConnection
(ConfigurationManager.ConnectionStrings[ "sqlConnString "].ToString());
conn.Open();
SqlCommand dbcmd = new SqlCommand(sql_inst, conn);
.............................
conn.Close();
}
rdr.Close();
oleconn.Close();
}
catch
{
labelError.Visible = true;
}
}
protected void B(){...............}
有的地方我省略了。B和A方法差不多
string query = "SELECT * FROM [提取物生产信息$] ";中[提取物生产信息$]是sheet名。如果这个名字是对的,程序运行没有错误。如果传上来的表是错的,我加了try 就是为了解决这个问题。但在System.IO.File.Delete(UploadFileName);这的时候提示excel被其他进程占用。 GC.Collect();是我用来释放进程的,我以为是没有运行到这一步。我加了断点进行调试,结果一切正常。但运行的时候就始终出错。
各位看看 是怎么回事情,或者有什么更好的办法?
[解决办法]
试试加finally,在里面把oleconn Close掉.