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.
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)
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:\ :
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")
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)
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 ?