使用ODBC在经典ASP中关闭与Excel电子表格的连接

使用ODBC在经典ASP中关闭与Excel电子表格的连接

问题描述:

有点啰嗦的标题,但我有一个经典的ASP应用程序我想写一个用户上传Excel电子表格的位置,然后将该电子表格导入到SQL中。使用ODBC在经典ASP中关闭与Excel电子表格的连接

我有一切工作很好,但我遇到的一件事是,我打开电子表格使用ODBC并关闭所有引用它的对象后,如果我尝试删除该文件,我得到一个权限被拒绝的错误。

如果我在上传前尝试扫描临时目录,并遇到以前上传的文件(比如说在最近两分钟内),我会得到权限被拒绝的错误。

如果我等了一两分钟,似乎无论锁上哪个文件被释放,我可以删除它。

下面是一些代码:

sPath = Server.MapPath("/_temp/") & "\" 
sFileName = Request.QueryString("filename") 

Set objFile = Server.CreateObject("Scripting.FileSystemObject") 

If objFile.FileExists(sPath & sFileName) Then 
    objFile.DeleteFile sPath & sFileName, True 
End If 

'Upload file occurs here 

sConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & sPath & sFileName & ";" 
adLockOptimistic = 3 

sSQL = "SELECT * " 
sSQL = sSQL & "FROM Range" 
Set rsSystem = objExcel.Execute(sSQL) 

'Do stuff 

rsSystem.Close 
Set rsSystem = Nothing 
objExcel.Close 
Set objExcel = Nothing 
Set objFile = Nothing 

似乎并不重要,如果我尝试之前或之后,我做进口,如果我尝试删除该文件导入成功之后,我得到删除文件权限被拒绝,但如果我等一会儿,我就可以删除它。

这是一个问题,因为用户将被提供模板,他们可能会更正并立即重新上传。

关于为什么当我关闭所有关联的对象时没有立即释放锁的任何想法?

谢谢!

编辑:

更改为使用不同的驱动程序连接字符串似乎做的伎俩,现在当我关闭的对象,我可以没有问题

sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sPath & sFileName & ";Extended Properties=Excel 8.0;" 
+0

SQL我们谈论哪些呢?如果它是SQL Server,那么为什么不使用DTS(2000)或SSIS(2005+)? – Paul 2014-09-30 08:55:56

+0

SQL Server。该规范适用于用户从浏览器上载Excel电子表格,查看中间页面电子表格中的内容,验证并导入到表格中。不确定SSIS是最好的,还是它? – Tom 2014-09-30 14:50:36

+0

我不明白为什么不这样做 - 您可以在文件上传后从Excel电子表格导入,然后删除文件,节省一大块空间。 – Paul 2014-09-30 14:56:28

我已经删除的文件实际上找到了很多方法来做到这一点。

+0

我对SSIS不太熟悉,但做过一些尝试,我认为它不适合我在这里需要做的事情。可以将它与其他一些项目一起使用。我确实找到了解决方法,拒绝错误的权限,将更新OP,并感谢锁定检查,这也可以派上用场。 – Tom 2014-09-30 17:03:20

+0

没有probs,汤姆。祝你好运。 – Paul 2014-10-01 08:08:00