2012-10-25 5 views
1

Je reçois une exception "Permission denied" lorsque je me connecte à un fichier .sdf.Autorisation refusée pour SQL Server CE sous Win XP

J'utilise cette chaîne de connexion.

connection string="Data Source=|DataDirectory|\DB.sdf;Password='something';Mode = Read Only;Temp Path= Environment.GetFolderPath(Environment.SpecialFolder.Templates);Persist Security Info=True"" providerName="System.Data.EntityClient" /> 

Ce travail est bien sur Windows 7, mais quand je lance mon application sur Win XP, il retourne

Autorisation refusée

exception

J'ai essayé adresse différente pour le fichier temporaire, mais il a toujours échoué.toutes ces options sont vraies

  1. Les chemins du fichier de base de données existe sur la machine xp
  2. J'ai la permission de créer un fichier temporaire dans le répertoire donné
  3. Je fournir le bon mot de passe.

Ce problème se produit juste au moment où la chaîne de connexion de base de données afin de lire only.I trouver une solution, mais je ne peux pas les utiliser:

solution 1:

Voici la scoop sur cela. Lorsque nous déplaçons un fichier SDF de XP vers Vista, en raison d'un changement dans la version NLS, nous essayons d'ouvrir le fichier en mode lecture-écriture pour réécrire les index s'il en existe. Cela se produit seulement sur le premier ouvert sur le passage de XP à Vista. Donc un simple travail autour pour vous est de changer temporairement le fichier en mode lecture-écriture l'ouvrir sur Vista et revenir en lecture seule.

Je ne peux pas utiliser cette solution car mon application est exécutée à partir d'un DVD.

solution 2:

ayant 3 fichiers sdf, un pour XP/Server 2003 et un pour Vista/Server 2008/Win7 et un pour gagner 8

Ceci est également horrible, parce que je n'ai pas d'espace libre sur l'application DVD pour le faire.

tout le monde a une bonne idée pour résoudre ce problème.

+0

À moins que vous ne manipuliez DataDirectory, la base de données se trouve dans le dossier Program Files, qui est lu par défaut par les utilisateurs normaux. – ErikEJ

+0

@ ErikEJ: J'essaie un dossier différent d'un autre lecteur et ... mais ne fonctionne pas – KF2

Répondre

0

Copiez le fichier dans un emplacement où il peut être écrit et supprimez la propriété Read Only du fichier. Connectez-vous à ce fichier. Peut être appelé avec SpecialFolder.LocalApplicationData pour obtenir un emplacement approprié.

Path.GetTempPath pourrait également être utile à cet égard.

+0

pour une raison quelconque, je ne peux pas copier ma base de données sur le PC de destination, mais savez-vous Sq-Lite résoudre ce problème? – KF2

+0

@irsog Vous pouvez ['ouvrir'] (http://www.sqlite.org/c3ref/open.html) une base de données SQLite en mode lecture seule avec [' SQLITE_OPEN_READONLY'] (http: //www.sqlite .org/c3ref/c_open_autoproxy.html), mais cela dépend de votre scénario. –

+0

Confus ici. Est-ce SQLite ou SQL Server CE? Ce sont 2 choses très différentes. – AngryHacker

0

Vous devez disposer de 2 copies du fichier de base de données sur le DVD, une pour XP/Server 2003 et une pour Vista et ultérieures. Ou copiez la base de données dans un emplacement accessible en écriture lors du premier lancement de l'application. Le même problème s'applique à SQL Server Compact 4.0

+0

: comme je l'ai dit dans ma question, ma taille de base de données est d'environ 1,5 Go et je ne peux pas avoir 2 copes d'entre eux parce que la taille est limitée, et la deuxième solution ne fonctionne pas. – KF2

+0

: savez-vous que Sq-lite a le même problème ou non? – KF2

+0

Je ne comprends pas pourquoi la deuxième solution ne fonctionne pas, même si l'application fonctionne à partir d'un DVD, il peut utiliser des données sur le disque dur ?? Et je n'ai aucune idée de sqlite – ErikEJ