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

时间:2014-09-29 17:29:08

标签: sql file-upload file-io asp-classic

有点像一个罗嗦的标题,但我有一个经典的ASP应用程序我试图写一个用户上传Excel电子表格然后我拿这个电子表格并将数据导入SQL。

我的一切都运行得很好,但我遇到的一件事是,在我使用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;"  

1 个答案:

答案 0 :(得分:1)

我实际上已经找到了很多方法来做到这一点。