2008-11-26 4 views
1

J'ai une application simple qui utilise une base de données SQL Express 2005. Lorsque l'utilisateur ferme l'application, je veux donner la possibilité de sauvegarder la base de données en faisant une copie dans un autre répertoire. Cependant, quand j'essaie de le faire, j'obtiens "Le processus ne peut pas accéder au fichier '... \ Pricing.MDF' parce qu'il est utilisé par un autre processus." J'ai fermé la connexion, éliminé la connexion, mis à zéro, 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 à utiliser la même connexion tout au long. Je n'ai pas vu où je pourrais détacher la base de données pour contrer la connexion dans la chaîne de connexion.Comment libérer la base de données SQL Express?

1 - Comment DIFFUSER la chose? 2 - Yat-il un meilleur moyen que de simplement copier la base de données? L'application est pour mon mari seulement, donc je serai capable de le gérer s'il a vraiment besoin de restaurer à partir de la sauvegarde.

Merci!

Répondre

4

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

Avoir SQL générer la sauvegarde est beaucoup plus sûr et plus souhaitable, mono-utilisateur ou multi-utilisateur. Vous pouvez fournir un lien vers une fonction d'appel T-SQL que vous pouvez automatiser complètement dans la mesure où la source db 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 a introduit une autre syntaxe T-SQL pour le faire, pour la vie de moi je ne peux pas le trouver. Mais il existe des moyens de le faire via M $$ SQL sans avoir le serveur de base de données complet.

+0

Vous pouvez détacher le fichier db du serveur. Ensuite, il est prudent de faire une copie. Toutefois, la base de données n'est pas disponible pendant que cela se produit. –

0

Il existe un exemple dans this post qui montre comment sauvegarder une base de données SQL Express dans un programme.

0

Si cela est un utilisateur unique application ou base de données en lecture seule, ne pas utiliser SQL Server Express. C'est ce que SQL Server Compact est pour. Cela résoudra votre problème de sauvegarde et simplifiera également le déploiement.

+0

Cela ne fonctionnera pas tout à fait, parce que j'aime mes procédures stockées. Mais c'est une option très intéressante - merci! – CindyH

+0

Utilisez un autre moteur in-process qui prend en charge les SPs. Une base de données qui s'exécute en tant que service ne convient tout simplement pas à une application de bureau locale. –

Questions connexes