2016-07-24 25 views
0

Ich bin neu bei SQL Server und stecken mit sehr grundlegenden (erscheint so!) Art von Problem. Ich greife über meine C# -App auf meine lokale SQL Server-Datenbankdatei zu.Kann meine SQL Server-Datenbank nicht kopieren oder verwenden, während meine C# -App ausgeführt wird

Ich möchte in der Lage sein, eine Sicherung meiner lokalen Datenbank auf FTP-Server über meine C# -App zu erstellen, wann immer ich will. Aber wenn ich versuche, die Datenbank-Datei zu laden (oder kopieren sogar Windows Explorer verwenden) Ich erhalte eine Fehlermeldung

Aktion kann nicht abgeschlossen werden, da Datei in SQL Server geöffnet ist

Jedes Mal, Form in meiner app geladen ist, bekomme ich eine Liste von Produkten durch Aufruf dieser Funktion:

private void populate_products() 
{ 
    SqlConnection con = new SqlConnection(); 

    con.ConnectionString = @"Data Source=.\SQLEXPRESS;"+ 
          "AttachDbFilename=" + AppDomain.CurrentDomain.BaseDirectory + "myDB.mdf;" + 
          "Integrated Security=True;Connect Timeout=30;User Instance=True"; 
    con.Open(); 

    try 
    { 
     SqlCommand cmd; 

     string cmd1 = "SELECT Name,Cost FROM Product"; 

     cmd = new SqlCommand(cmd1, con);    
     SqlDataReader read = cmd.ExecuteReader(); 

     bool ch = true; 

     while (read.Read()) 
     { 
      list_name.Items.Add(read[0].ToString()); 
      costs.Add(read[1].ToString()); 
     } 

     read.Close(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 

    con.Close(); 
    con.Dispose();  
} 

Sobald diese Funktion aufgerufen wird Datei kann nicht kopiert werden. Da con.Close() aufgerufen wird wundere ich mich, warum die Datei noch benutzt wird.

Selbst das Trennen der Datenbank von SQL Server Management Studio funktioniert nicht. Kann mir bitte jemand helfen?

Antwort

0

Sie müssen Verbindungspools löschen.

Versuche Zugabe

SqlConnection.ClearAllPools(); 

am Ende des Verfahrens.

+0

Arbeitete wie ein Charme. Vielen Dank :) – user3103111

1

Eine Alternative wäre, eine Sicherungskopie zu erstellen und diese dann anstelle der angehängten Datenbankdateien hochzuladen.

können Sie diesen SQL-Befehl verwenden, um eine Sicherungskopie zu erstellen:

BACKUP DATABASE [DATABASENAME] TO DISK = 'c:\path\backup.bak' WITH FORMAT, INIT, STATS = 25 

ändern DATABASENAME und c:\path\backup.bak wie nötig. Sie können dann die bak-Datei abholen und von dort hochladen.