我正在尝试阻止使用ADO.NET读取Excel文件时出现以下情况:
Microsoft Jet数据库引擎无法打开文件''。它已由其他用户专门打开,或者您需要获得查看其数据的权限。
我知道它正在发生,因为另一个用户打开了文件,但我无法摆脱它。我已经尝试将Read Only=True;
添加到我的连接字符串中,但这不起作用。我也尝试将连接的Mode
设置为只读,但我无法弄清楚如何在C#中。
这是我的连接字符串:
Provider=Microsoft.Jet.OLEDB.4.0; data source=test.xls; Extended Properties="Excel 8.0;HDR=No;IMEX=1"
感谢您的帮助!
答案 0 :(得分:2)
如果您没有该文件的权限,也可能出现这种情况,而不仅仅是在它完全打开时。无论如何,我总是发现这个问题的最佳解决方法是将文件的副本自动化为新的临时文件。副本几乎是即时的,即使对于大文件也是如此,所以它们不应该减慢你的速度,因为你的应用程序只是只读的,所以你不必担心之后丢弃临时文件。
此外,这将清除可以清除的任何权限问题。如果您具有读取权限,则副本将起作用,如果没有,则无论如何都没有解决方法。如果使临时副本的目标路径与工作簿的路径相同,则您将拥有复制文件的完全权限。 (Application.Path
)
使用FileCopy srcFile, destName
命令。
答案 1 :(得分:0)
嗯,你说过你尝试将模式改为只读,你究竟是怎么做到的?
根据MSDN,默认情况下,Microsoft Jet的OLE DB提供程序以读/写模式打开Microsoft Jet数据库。要以只读模式打开数据库,请将ADO Connection object上的Mode属性设置为adModeRead。
所以在C#中应该看起来像:
ADODB.Connection myConn = new new ADODB.Connection();
myConn.Mode = adModeRead; //1
myConn.Open(strConectionString, null, null, -1);