日期:2014-05-16  浏览次数:20997 次

ASP打开EXCEL后关闭不了的问题
set excelConn=Server.CreateObject("ADODB.Connection")
excelConnStr="Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ="e:\xx.xls"
excelConn.Open excelConnStr

set excelTableRs=excelConn.OpenSchema(20)

......

excelTableRs.close
Set excelTableRs = Nothing
excelConn.close
Set excelConn = Nothing

执行完毕后,我想删除该excel文件删除不了(fso删除或者直接跑目录里删除)。大概等了1分钟后就可以删除了。不知道什么原因。提示是iis 正打开文件。

------解决方案--------------------

set res=createobject("ADODB.recordset")
res.Open "Select * From [Sheet1$]",excelConnStr, 1, 1

改用这种方式打开试试
------解决方案--------------------
可能是垃圾回收器不会立即回收资源的原因
 if(CollectGarbage)CollectGarbage(); 
立即释放资源试试,放到你释放变量的代码后面
------解决方案--------------------
引用:
Quote: 引用:

可能是垃圾回收器不会立即回收资源的原因
 if(CollectGarbage)CollectGarbage(); 
立即释放资源试试,放到你释放变量的代码后面

/****************
excelTableRs.close
Set excelTableRs = Nothing
excelConn.close
Set excelConn = Nothing
%>
<script language="jscript" runat="server">
if(CollectGarbage)CollectGarbage(); 
</script>
不起作用。我在火狐下

看错了,我以为是客户端打开的excel呢;服务端的不清楚,不过道理应该差不多,你调查一下ASP的资源回收方式,看能不能找到线索
------解决方案--------------------
引用:
Quote: 引用:


set res=createobject("ADODB.recordset")
res.Open "Select * From [Sheet1$]",excelConnStr, 1, 1

改用这种方式打开试试


因为我要查询xls里面的表,所以这样不行。

你改用  Excel.Application  方式打开 能不能即时关 ,再通过 Sheets 属性取表信息
 
------解决方案--------------------
释放要时间。所以可以做个回收的功能。
------解决方案--------------------
ODBC连接池释放链接有一段时间的。可以考虑写个后台服务去定时删除一定时间段内的文件。