[英]How to Connect to a Remote Database
我在连接到位于远程计算机上的Access数据库时遇到一些麻烦:
Microsoft Access数据库引擎无法打开或写入文件'\\\\ ACCESSSERVER-PC \\ Warehouse Manager \\ Error Logging \\ Error Logging.accdb'。 它已经由另一个用户专门打开,或者您需要权限才能查看和写入其数据。
该数据库未开放供其他任何人编辑,我应该可以连接到它。
我正在使用此连接字符串:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\\\ACCESSSERVER-PC\\Warehouse Manager\\Error Logging\\Error Logging.accdb;Persist Security Info=False;
并且在调用connOpen();
时发生错误connOpen();
using (var conn = new OleDbConnection(ConnectionString))
{
try
{
conn.Open();
}
}
我给了我自己对服务器以及.accdb
文件的完全权限,并按照这篇文章对NETWORK SERVICE
帐户进行了相同的操作 ,但还是不走运。
连接到本地存储的数据库时,我没有任何问题,这似乎只是在尝试通过网络进行连接时发生。
其他人有没有遇到过这种情况并找到了解决方案? 任何帮助或建议,我们将不胜感激。
我已经检查了这个答案,并且可以确认我具有访问文件的所有必需权限。
该问题被标记为该问题的重复项,但我没有任何正在运行的程序在文件中打开流。
事实证明,这是由于尝试使用一些糟糕的IT基础架构引起的。
问题是\\\\ACCESSSERVER-PC
实际上是Windows 7计算机,因此只能处理有限数量的连接。
针对数据库文件从此答案运行IsLocked
代码给了我一个更有用的错误消息:
此时无法再与该远程计算机建立连接,因为该计算机可以接受的连接数目已经很多。
让一些用户从服务器断开其Access运行时和映射的驱动器的连接并再次运行代码后, IsLocked
返回false
,然后我就可以连接到数据库了。
这是我用来帮助我找到解决方案的代码:
protected virtual bool IsFileLocked(FileInfo file)
{
FileStream stream = null;
try
{
stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
//
// ** OR There are already too many connections open to the
// ** "server" where the file exists!
return true;
}
finally
{
if (stream != null)
stream.Close();
}
//file is not locked
return false;
}
这个故事的寓意是, 当您需要与服务器建立20多个并发连接时,不要将Windows 7计算机用作服务器(或在它们使用的环境中工作)!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.