Échec de la mise à jour de la database .mdf car la database est en lecture seule (application Windows)

J'ai créé une application de database Windows en utilisant C #. Mon application s'exécute correctement sur Windows XP, mais elle ne s'exécute pas correctement sur les systèmes Vista ou Windows 7. Mon application affiche un message similaire à

Échec de la mise à jour de la database .mdf car la database est en lecture seule

Quelqu'un peut-il me donner une solution à cela?

Si le file MDB se trouve dans votre path d'application, les permissions par défaut nécessiteront une élévation des droits pour pouvoir écrire dans les files. Je vous recommand de déplacer datatables vers le dossier partagé ApplicationData, où les users finaux auront des permissions d'écriture. défaut

La grande nouveauté entre Windows XP et Windows Vista / 7 est l'introduction de l'UAC, ce qui signifie que les users, même s'ils sont créés en tant qu'administrateurs, n'ont pas systématiquement access en lecture / écriture aux locations "importants" tels que %programfiles% Généralement C:\Program Files ou C:\Program Files (x86) ). C'est pourquoi votre application fonctionne sur Windows XP et non sur Windows Vista.

Vous devez stocker vos données dans le %programdata% (qui est généralement C:\ProgramData ) si datatables sont partagées entre les users de la machine ou %appdata% (généralement C:\Users\USERNAME_GOES_HERE\AppData\Roaming ) si elle est spécifique à un user donné. Vous ne rencontrerez plus le problème d'être incapable d'écrire dans le file.

La raison en est qu'en stockant des données dans le directory d'installation de votre programme, vous faisiez la mauvaise chose . Windows ne vous a pas empêché de le faire auparavant, mais il était assez largement documenté que %programfiles% n'était pas l'endroit approprié pour stocker des données.

Je suis tombé sur ceci lié à localdb, le file est nommé:

 myfolder/mysolution/myproject/App_Data/something.mdf 

La façon dont je l'ai réparé est de cliquer droit sur le dossier de niveau supérieur ( myfolder ), puis choisissez Properties , puis choisissez Edit , puis Users , ajoutez aux users l'autorisation Modify ou à la fois Modify et contrôle total (il s'agit d'un environnement de développement ), puis click Appliquer.

Donc, en d'autres termes, d'après mon expérience, peu importe le dossier dans lequel vous avez placé le localdb, vous avez juste besoin de donner aux users la permission d'écrire.

aller dans le dossier où le programme est installé et faites un clic droit sur le file de database et properties -> Sécurité -> Groupe ou nom d'user (Cliquez sur les users un par un et voir ci-dessous pour les permissions)

Si pour l'user si pas réglé à un contrôle total, puis click Modifier -> Sélectionnez l'user et donner un contrôle total ..