Probleme lors de la copie de la bdd ( le fichier et en cours d'utilisation ) [Résolu]

Signaler
Messages postés
6
Date d'inscription
mercredi 9 juillet 2003
Statut
Membre
Dernière intervention
31 juillet 2009
-
Flysteur
Messages postés
6
Date d'inscription
mercredi 9 juillet 2003
Statut
Membre
Dernière intervention
31 juillet 2009
-
Bonjour, je sollicite votre aide car j'ai un petit souci avec mon programme en faite je voudrai à chaque fois que je quitte le programme qu'il effectue une copie de la base de donnée mais lorsqu'il commence la copie j'ai le message d'erreur : Le processus ne peut pas accéder au fichier 'C:\database1.mdf', car il est en cours d'utilisation par un autre processus.

Pour copier le fichier j'utilise : File.Copy("C:\Database1.mdf", "E:/bdd/backupbdd.mdf")

Je suppose que ces la chaine de connexion qui n'est pas fermer donc elle utilise toujours la base de donnée mais malgré mais recherche et mes tentative close() dispose() je n'ai malheureusement pas réussi à la fermer, si quelqu'un a une idée je suis preneur.

Merci beaucoup

6 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
Ici, un exemple de backup en ligne de commande trouvé dans l'aide de SQL Server
http://code.msdn.microsoft.com/SQLExamples/Wiki/View.aspx?title=ExpressBackups&referringTitle=ExpressMaintenance


Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
Salut
En effet, il faut faire un .Close sur l'objet avec lequel tu as établi la connexion.
Si tu as plusieurs connexions, il faut les fermer aussi.

Oups. MDF, ce sont des extensions SQL Server ça, non ?
Le problème peut-être plus complexe ...
Es-tu délogué de SQL Server ?
N'existe t-il pas une commande plus 'pro' dans SQL Server pour faire un backup, que de copier le fichier principal, parce qu'il y a d'autres fichiers qui 'vivent' aussi, genre LDF, NDF ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
Ouvre l'aide de SQL Server et tape 'backup'
Il doit falloir se loguer en admin, sans connexion à une DB, pour permettre cette manip.
Messages postés
6
Date d'inscription
mercredi 9 juillet 2003
Statut
Membre
Dernière intervention
31 juillet 2009

Merci de votre réponse, je me suis documenter grâce a l'aide de SQL server pour faire un backup de la bdd mais j'ai l'impression que l'on ne peu le faire uniquement si la bdd et rattacher au projet or j'utilise une chaine de connexion qui va la récupérer dans mon répertoire C:\ :

connexion = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Database1.mdf;Integrated Security=True;User Instance=True"


J’ai essayé d'utiliser :

BACKUP DATABASE Database1 TO DISK = 'E:\bdd\bdd.Bak'

Mais cela n'a visiblement pas fonctionné car il me retourne une erreur :
Impossible de trouvé l'entrée dans sysdatabases pour la base de donnée 'Database1'

J'aurai cependant bien aimé approfondir la façon d'on on ferme la connexion car j'ai beau essayer d'utiliser close ou dispose la connexion ne ce ferme jamais sauf quand je ferme le programme bien sure

Voici ma classe pour la connexion :
Imports System.Data
Imports System.Data.SqlClient
Public Class chargement
    Private CMX As System.Data.SqlClient.SqlConnection
    Private CMD As System.Data.SqlClient.SqlCommand
    Private DS As System.Data.DataSet
    Private DA As System.Data.SqlClient.SqlDataAdapter
    Private requete, connexion As String


    Sub New()
        connexion = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Database1.mdf;Integrated Security=True;User Instance=True"
        CMX = New System.Data.SqlClient.SqlConnection(Me.connexion)
        Me.CMD = New System.Data.SqlClient.SqlCommand(Me.requete, Me.CMX)
        Me.DA = New System.Data.SqlClient.SqlDataAdapter(Me.CMD)
        Me.DS = New Data.DataSet
    End Sub

    Public Function chargement(ByVal requete As String, ByVal donnees As String)

        Me.DS.Clear()
        Me.requete = requete
        Me.CMD.CommandText = Me.requete
        Me.DA.Fill(Me.DS, donnees)
        Return Me.DS

    End Function


Et ensuite pour chaque requête j’utilise :
Me.Objdonnees = New chargement()
Requete = "la requête"
Me.DS = Me.Objdonnees.chargement(Requete, "TABLE")


Merci beacoup de ton aide
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
Oui, en fait, les connexions à SQL Server sous-entendent que tu te lies avec une base de donnée (paramètre AttachDBFileName)
Il faut donc, à mon avis, se connecter à SQL Server avec un login niveau admin mais sans se lier à une DB, ça doit être faisable.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
6
Date d'inscription
mercredi 9 juillet 2003
Statut
Membre
Dernière intervention
31 juillet 2009

Merci beaucoup cela a l'air de fonctionner, cependant j'aurai une dernière petit question lorsque je close() ou dispose() la connexion elle est bien fermer mais alors pourquoi le fichier Database1.mdf n'est pas libérer ?
Y aurait’ il une solution pour libérer le fichier ?