Question

J'ai une application simple qui utilise une base de données SQL Express 2005. Lorsque l'utilisateur ferme l'application, je souhaite donner la possibilité de sauvegarder la base de données en en faisant une copie dans un autre répertoire. Cependant, lorsque j'essaie de le faire, j'obtiens "Le processus ne peut pas accéder au fichier '... \ Pricing.MDF' car il est utilisé par un autre processus." J'ai fermé la connexion, jeté la connexion, mis à rien, et GC.Collect (), mais cela ne fait aucune différence. Ma chaîne de connexion est "Source de données =. \ SQLEXPRESS2005; AttachDbFilename = | DataDirectory | \ Pricing.mdf; Sécurité intégrée = True; Instance utilisateur = True " et je continue simplement à utiliser la même connexion. Je n'ai pas vu où je pouvais détacher la base de données pour contrer l'attachement dans la chaîne de connexion.

1 - Comment puis-je libérer la chose? 2 - Existe-t-il un meilleur moyen que de simplement copier la base de données? L’application est réservée à mon mari. Je serai donc en mesure de la gérer s’il a réellement besoin de restaurer à partir d’une sauvegarde.

Merci!

Était-ce utile?

La solution

Vous ne voulez pas copier le fichier mdf directement, car SQL conserve la plupart des modifications dans le journal des transactions, regardez l'heure modifiée après l'exécution de certaines requêtes, elle n'écrit pas directement dans le fichier. Je l’ai remarqué lors de la configuration d’un travail rsync.

Faire en sorte que SQL génère la sauvegarde est beaucoup plus sûr et souhaitable, qu’il soit mono-utilisateur ou multi-utilisateur. Vous pouvez fournir un lien vers une fonction appelant le T-SQL que vous pouvez complètement automatiser aussi loin que la base de données source et le dossier de destination:

BACKUP DATABASE [mydatabasename]
TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\Scheduled Task Backups\mydatabasename-backup' WITH NOFORMAT, NOINIT,  NAME = N'mydatabasename-Full Data

SQL 2005 avait introduit une autre syntaxe T-SQL pour ce faire. Je ne le trouve pas pour la vie. Mais il existe des moyens de le faire par le biais de M $$ SQL sans avoir le serveur de base de données complètement développé.

scroll top