Chaîne de connexion en lecture seule à une base de données d'accès

j'essaie de me connecter à un fichier de base de données D'accès en utilisant un système.Données.OleDb.OleDbConnection. Je dois me connecter en mode Lecture seule parce qu'une autre application l'utilise en même temps. Je peux me connecter à la base de données en lecture/écriture sans problème, mais je ne trouve nulle part la chaîne correcte pour readonly.

j'ai essayé:

Provider=Microsoft.ACE.OLEDB.12,0; Source De Données={0}; Sécurité Persistante Info=False; Mode=Read

Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Persist Security Info=False;Extended Properties= " ReadOnly=true;"

Merci.

EDIT:

<!-(J'aurais dû mettre plus d'information dans la question originale.)

je pouvais me connecter avec succès à la base de données d'accès quand il était sur le machine, mais quand j'ai essayé de me connecter à la base de données d'accès sur un distance machine avec la chaîne de connexion

Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=False;Mode=Read

je reçois l'erreur suivante:

System.Data.OleDb.OleDbException (0x80004005): The Microsoft Office Access database engine cannot open or write to the file '{0}'. It is already opened exclusively by another user, or you need permission to view and write its data.

mon application est en cours d'exécution dans un service windows sous le compte système local.

11
demandé sur Smiffy 2011-05-10 01:52:22

2 réponses

je pense que cela a à être manipulés par l'utilisateur les autorisations que le DB admin, contrôle ou avec différents types de curseur pour vos jeux d'enregistrements, qui vous contrôle. Je ne pense pas que la chaîne de connexion spécifie le mode d'accès, elle vous y amène simplement. ;)

2
répondu Brett Rossier 2011-05-16 20:15:13

le vrai problème est que Excel laisse la connexion ouverte jusqu'à ce que le fichier soit fermé.

dans Excel 2007+, le paramètre Maintenanconnection est défini à true par défaut. Vous devez aller dans l'éditeur vb et utiliser le code pour l'activer à faux. Je n'ai pas vu le moyen de le faire à travers l'interface visuelle. Même si vous définissez la chaîne de connexion en lecture seule, elle verrouillera une base de données d'accès (d'après mon expérience).

Sheets("sheet1").PivotTables("pivottable1").PivotCache.MaintainConnection = False

Pour Table de requête:

Range("A2").Select
Selection.ListObject.QueryTable.MaintainConnection = False
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

en le mettant à false, la table se connecte, exécute la commande, puis se déconnecte, libérant la serrure.

2
répondu Nathan W 2012-10-11 06:10:10