0

J'ai créé une application qui stocke les données de requête & à l'aide de la base de données SQL. Tout est ok mais juste le problème est de sauvegarder, et après beaucoup de recherche j'ai trouvé deux manières de sauvegarder. D'abord, en utilisant la commande "use [Database Name] Backup database [Database Name] To Disk='[Backup Location]'. Mais le problème avec cette méthode est qu'il faut installer le logiciel SSM sur la machine mais je ne veux pas qu'il soit installé car cela permettrait à l'utilisateur d'avoir plus de contrôle qu'il n'en a besoin pour ce fichier de base de données, donc si quelqu'un peut donner Pour moi, cette solution serait vraiment utile. Et la deuxième méthode consiste à copier le fichier .mdf et le fichier .ldf, mais le problème est que je ne peux pas copier ces fichiers directement depuis l'application ou même indirectement si l'application est ouverte et que nous pouvons la copier uniquement lorsque nous fermons l'application. Je veux ça et ma question principale est centrée sur cette question.Comment copier des fichiers .mdf et .ldf d'un emplacement à un autre alors que l'application est toujours ouverte?

Ma question. Comment puis-je copier ces fichiers de l'emplacement par défaut à l'emplacement de sauvegarde en utilisant le codage VB.Net directement à partir de l'application sans la fermer? Est-il possible de fermer la connexion à ces fichiers?

Note: J'ai essayé Connection.Close() et Connection.Dispose()

+1

Vous n'avez pas besoin de SSMS pour effectuer une sauvegarde. Voir [Utilisation de Transact-SQL ici] (https://msdn.microsoft.com/fr-fr/library/ms187510.aspx) – peterG

+1

Exemple d'utilisation de Transact-SQL: - - - - - USE AdventureWorks2012; GO BACKUP BASE DE DONNÉES AdventureWorks2012 TO DISK = 'Z: \ SQLServerBackups \ AdventureWorks2012.Bak' FORMAT, mediaName = 'Z_SQLServerBackups', NOM = 'sauvegarde complète de AdventureWorks2012'; GO '- - - - Ici, que dois-je remplacer par "AdventureWorks2012" –

+0

votre nom de base de données –

Répondre

0

Ok, donc avant de répondre à la question-moi de dire quelque chose, la plupart d'entre nous connaissent et a vu de nombreux sites que la deuxième méthode (la copie du fichier .mdf et .ldf est le moyen le moins sûr et peut causer un problème terrible et la première méthode (en utilisant Transact-SQL pour la sauvegarde/restauration) est plus préférable et pratique avec une méthode plus sûre. Mais je suppose que beaucoup de gens (surtout les débutants comme moi) auraient un problème avec la requête use [DatabaseName] Backup database [DatabaseName] To Disk='[Backup Location]' parce que la base de données est composée de deux fichiers (.mdf et .ldf) alors comment ces deux fichiers peuvent être utilisés avec ce code. Et la solution que je trouve ajoute initial catalog = [DatabaseName] à mon ConnectionString, vérifiez le code suivant:

Dim connectionString As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=" + My.Settings.DBLocation + ";initial catalog=InvoiceDB;Integrated Security=True" 

Sub Backup_Click() 
    With SaveFileDialogue2 
     .Title = "Select Backup Location" 
     .Filter = "BAK File Only|*.bak" 
     .FileName = "Backup " + Format(Now.ToString("dd MMM yyyy")) 
     If SaveFileDialogue2.ShowDialog = DialogResult.OK Then 
      If .FileName <> "" Then 
       Dim BackupQuery As String 
       BackupQuery = "Backup database [DatabaseName] To Disk='" + .FileName + "'" 
       Using conn As New SqlConnection(connectionString) 
        Using comm As New SqlCommand() 
         With comm 
          .Connection = conn 
          .CommandType = CommandType.Text 
          .CommandText = BackupQuery 
         End With 
         Try 
          conn.Open() 
          comm.ExecuteNonQuery() 
          MsgBox("Backup Completed!", MsgBoxStyle.OkOnly, "Successful") 
          conn.Close() 
         Catch ex As SqlException 
          MessageBox.Show(ex.Message.ToString(), "Error Message") 
         Finally 
          conn.Dispose() 
         End Try 
        End Using 
       End Using 
      End If 
     End If 
    End With 

End Sub 

et VOILA cela a fonctionné! Donc, si quelqu'un d'autre a le même problème, vous pouvez essayer celui-ci ....

Note: Changez [DatabaseName] à votre nom de base de données et supprimez "[]" aussi. Et j'ai ajouté cette réponse à une autre question car elles sont similaires pour que vous puissiez suivre n'importe qui. Click Here pour aller à l'autre question.