Comment créer une sauvegarde de database, lorsque la database n'est pas stockée dans Microsoft SQL Server?

Je construis une application C # avec la database SQL Server 2008 R2 qui est stockée dans le dossier bin de mon projet. J'utilise la méthode Linq to Sql pour créer la database et l'attacher à mon projet.

Le problème que j'ai est que lorsque j'essaye de créer une sauvegarde de ma database. Il jette une erreur en disant

La database (nom_base_de_données) n'existe pas. Assurez-vous que le nom est entré correctement. BACKUP DATABASE se termine anormalement.

Voici le code que j'écris sur mon événement click click:

 try { SaveFileDialog sd = new SaveFileDialog(); sd.Filter = "SQL Server database backup files|*.bak"; sd.Title = "Create Database Backup"; if (sd.ShowDialog() == DialogResult.OK) { using (SqlConnection conn = new SqlConnection(connStr)) { ssortingng sqlStmt=ssortingng.Format("BACKUP DATABASE <database_name> TO DISK='{0}'",sd.FileName); using (SqlCommand bu2 = new SqlCommand(sqlStmt, conn)) { conn.Open(); bu2.ExecuteNonQuery(); conn.Close(); MessageBox.Show("Backup Created Sucessfully"); } } } } catch(Exception ex) { MessageBox.Show(ex.ToSsortingng()); } 

Ma string de connection:

 ssortingng connStr = ConfigurationManager.ConnectionSsortingngs["project_name.Properties.Settings.project‌​_nameConnectionSsortingng"].ConnectionSsortingng; 

puis depuis mon file app.config

 <add name="project_name.Properties.Settings.project_nameConnectionSsortingng" connectionSsortingng="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\database_name.mdf;Integrate‌​d Security=True;User Instance=True" providerName="System.Data.SqlClient" /> 

donc si quelqu'un a une solution à mon problème qui sera utile.

Après un très long brain storming, j'ai finalement réussi, voici la solution:

 try { SaveFileDialog sd = new SaveFileDialog(); sd.Filter = "SQL Server database backup files|*.bak"; sd.Title = "Create Database Backup"; if (sd.ShowDialog() == DialogResult.OK) { using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionSsortingngs["project_name.Properties.Settings.project‌​_nameConnectionSsortingng"].ConnectionSsortingng)) { ssortingng sqlStmt = ssortingng.Format("backup database [" + System.Windows.Forms.Application.StartupPath + "\\dbname.mdf] to disk='{0}'",sd.FileName); using (SqlCommand bu2 = new SqlCommand(sqlStmt, conn)) { conn.Open(); bu2.ExecuteNonQuery(); conn.Close(); MessageBox.Show("Backup Created Sucessfully"); } } } } catch (Exception) { MessageBox.Show("Backup Not Created"); } 

Ressource de cette question: Comment sauvegarder à partir de la database .mdf que j'ai créée

L'approche User Instance et AttachDbFileName = entière est imparfaite – au mieux! Lorsque vous exécutez votre application dans Visual Studio, elle va copyr le file .mdf (de votre directory App_Data vers le directory de sortie – généralement .\bin\debug – où votre application s'exécute) et très probablement , votre INSERT fonctionne très bien – mais vous regardez juste le mauvais file .mdf à la fin!

En outre, comme le file .mdf n'est pas lié de manière permanente à une instance SQL Server, vous ne pouvez pas utiliser de commands telles que BACKUP DATABASE .

À mon avis, la véritable solution serait de

  1. installez SQL Server Express (et vous l'avez déjà fait de toute façon)

  2. installer SQL Server Management Studio Express

  3. créez votre database dans SSMS Express , donnez-lui un nom logique (par exemple MyDatabase )

  4. connectez-vous en utilisant son nom de database logique (donné lorsque vous le créez sur le server) – et ne vous mêlez pas des files de database physiques et des instances d'users. Dans ce cas, votre string de connection serait quelque chose comme:

     Data Source=.\\SQLEXPRESS;Database=MyDatabase;Integrated Security=True 

    et tout le rest est exactement le même qu'avant …

Et puis, une fois que vous avez fait cela, vous pouvez également exécuter vos sauvegardes en utilisant BACKUP DATABASE MyDatabase .... sans aucun problème