2017-01-24 5 views
0

J'ai quelques problèmes de connexion à une base de données d'accès qui se trouve sur un ordinateur distant:Comment se connecter à une base de données à distance

Le moteur de base de données Microsoft Access ne peut pas ouvrir ou écrire dans le fichier « \\ ACCESSSERVER- PC \ Warehouse Manager \ Erreur de consignation \ Error Logging.accdb '. Il est déjà ouvert exclusivement par un autre utilisateur, ou vous avez besoin d'une autorisation pour voir et écrire ses données.

La base de données n'est pas ouverte à l'édition par quelqu'un d'autre et je devrais pouvoir me connecter à elle.

J'utilise cette chaîne de connexion:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\ACCESSSERVER-PC\Warehouse Manager\Error Logging\Error Logging.accdb;Persist Security Info=False;

Et l'erreur se produit lorsque vous appelez connOpen();

using (var conn = new OleDbConnection(ConnectionString)) 
{ 
    try 
    {  
     conn.Open(); 
    } 
} 

Je me suis donné les autorisations pour le serveur ainsi que le fichier .accdb iteself, et a fait de même pour le compte NETWORK SERVICE selon this post, mais toujours pas de chance.

Je n'ai aucun problème à me connecter aux bases de données qui sont stockées localement, et cela ne semble se produire que si je veux me connecter au réseau.

Est-ce que quelqu'un d'autre a connu cela et a trouvé une solution? Toute aide ou conseil est très apprécié.

J'ai vérifié this answer et peut confirmer que j'ai toutes les autorisations nécessaires pour accéder au fichier.

Cette question est marquée en tant que doublon de this question, mais je n'ai aucun programme en cours d'exécution qui aurait un flux ouvert au fichier.

+1

Copie possible de [Message d'erreur: Accès déjà exclusif par un autre utilisateur] (http://stackoverflow.com/questions/7660592/error-message-access-already-exclusively-by-another-user) – iwaduarte

+0

@iwaduarte J'ai accordé des autorisations de contrôle complet sur le dossier et le fichier d'accès pour 'SYSTEM',' NETWORK SERVICE', 'IUSR', et moi-même, mais toujours la même erreur – Bassie

Répondre

1

Il s'avère que cela a été causé par une tentative de travailler avec une infrastructure informatique terrible.

Le problème est que \\ACCESSSERVER-PC est en fait une machine Windows 7 et ne peut donc gérer qu'un nombre limité de connexions.

L'exécution du code IsLocked de this answer contre le fichier de base de données m'a donné un message d'erreur beaucoup plus utile:

connexions non plus peuvent être à cet ordinateur distant en ce moment car il y a déjà autant de connexions que l'ordinateur peut accepter.

Après avoir obtenu certains utilisateurs de se déconnecter de leur exécution d'accès et les lecteurs mappés du serveur et en cours d'exécution à nouveau le code, IsLocked retourné false et j'étais alors en mesure de se connecter à la base de données.

Voici le code je me aider à trouver la solution à ceci:

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; 
} 

La morale de l'histoire est Ne pas utiliser (ou de travailler dans un environnement où ils utilisent) Windows 7 machine en tant que serveur lorsque vous avez besoin de plus de 20 connexions simultanées au serveur!