繁体   English   中英

如何连接到远程数据库

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM