Excel的只读ADO.NET连接string

我试图阻止使用ADO.NET读取Excel文件时出现以下情况:

Microsoft Jet数据库引擎无法打开文件“”。 它已经由另一个用户专门打开,或者您需要查看其数据的权限。

我知道这是因为另一个用户打开了文件,但我无法摆脱它。 我试过添加Read Only=True; 到我的连接string,但这是行不通的。 我也试图设置连接Mode为只读,但我不知道如何在C#中。

这是我的连接string:

 Provider=Microsoft.Jet.OLEDB.4.0; data source=test.xls; Extended Properties="Excel 8.0;HDR=No;IMEX=1" 

谢谢您的帮助!

如果你没有这个文件的权限,那么也会出现这个问题,而不是仅仅当它是完全打开的时候。 无论如何,我总是发现这个问题的最佳解决方法是将文件的副本自动化到新的临时文件中。 副本几乎是即时的,即使是大文件也是如此,所以他们不应该让你的速度变慢,而且由于你的应用程序只能读取,所以你不必担心之后丢弃临时文件。

此外,这将清除任何可以清除的权限问题。 如果您拥有读取权限,则该副本将工作,如果没有,则不存在任何解决方法。 如果将临时副本的目标path设置为与工作簿相同的path,则对复制的文件具有完全权限。 ( Application.Path

FileCopy srcFile, destName使用FileCopy srcFile, destName命令。

那么,你说你试过把模式改成只读,你到底是怎么做的?

根据MSDN ,默认情况下,Microsoft Jet的OLE DB提供程序以读/写模式打开Microsoft Jet数据库。 要以只读模式打开数据库,请将ADO连接对象上的Mode属性设置为adModeRead。

所以在C#中它应该看起来像:

 ADODB.Connection myConn = new new ADODB.Connection(); myConn.Mode = adModeRead; //1 myConn.Open(strConectionString, null, null, -1);