![](/img/trans.png)
[英]How to make a ADO.Net connection (SQL Server or Oracle database) read-only
[英]Read-Only ADO.NET Connection String for Excel
我试图防止使用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"
谢谢您的帮助!
如果您没有该文件的权限,而不仅仅是在它完全打开时,也会出现这种情况。 无论如何,我始终发现解决此问题的最佳方法是将文件副本自动复制到新的临时文件。 副本几乎是即时的,即使对于大文件也是如此,因此它们不应该减慢你的速度,因为你的应用程序只是只读的,所以你不必担心之后丢弃临时文件。
此外,这将清除所有可以清除的权限问题。 如果您具有读取权限,则副本将起作用,如果没有,则无论如何都没有解决方法。 如果使临时副本的目标路径与工作簿的路径相同,则您将拥有复制文件的完全权限。 ( Application.Path
)
FileCopy srcFile, destName
请使用FileCopy srcFile, destName
命令。
好吧,您说您尝试将模式更改为只读,那么您是如何做到的呢?
根据MSDN ,默认情况下,Microsoft Jet的OLE DB提供程序以读/写模式打开Microsoft Jet数据库。 要以只读模式打开数据库,请将ADO Connection对象上的Mode属性设置为adModeRead。
所以在C#中应该看起来像:
ADODB.Connection myConn = new new ADODB.Connection();
myConn.Mode = adModeRead; //1
myConn.Open(strConectionString, null, null, -1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.