2010-04-10 85 views
4

我有这个代码,它不工作,但我不是为什么?如何在不使用SMO的情况下在C#中备份数据库(SQL Server 2008)?

try 
{ 
    saveFileDialog1.Filter = "SQL Server database backup files|*.bak"; 
    saveFileDialog1.Title = "Database Backup"; 

    if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
    { 
     SqlCommand bu2 = new SqlCommand(); 
     SqlConnection s = new SqlConnection("Data Source=M1-PC;Initial Catalog=master;Integrated Security=True;Pooling=False"); 

     bu2.CommandText = String.Format("BACKUP DATABASE LA TO DISK='{0}'", saveFileDialog1.FileName); 

     s.Open(); 

     bu2.ExecuteNonQuery(); 
     s.Close(); 

     MessageBox.Show("ok"); 
    } 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.ToString()); 
} 

,我得到这个错误:

alt text http://i39.tinypic.com/2zhh34k.png

问题是什么?

回答

4

你需要分配一个SqlConnection对象给SqlCommand - 试试这个代码:当我使用

if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
{ 
    string connStr = "Data Source=M1-PC;Initial Catalog=master;Integrated Security=True;Pooling=False"; 

    using(SqlConnection conn = new SqlConnection(connStr)) 
    { 
     string sqlStmt = String.Format("BACKUP DATABASE LA TO DISK='{0}'", saveFileDialog1.FileName); 

     using(SqlCommand bu2 = new SqlCommand(sqlStmt, conn)) 
     { 
      conn.Open(); 
      bu2.ExecuteNonQuery(); 
      conn.Close(); 

      MessageBox.Show("ok"); 
     } 
    } 
} 
+0

您代码我得到这个错误信息,http://i44.tinypic.com/5mbhxx.png - 什么是proplem? – Saleh 2010-04-11 19:17:24

+2

那么,你的SQL Server真的有一个目录'C:\ Users \ Saleh \ Documents'?请记住:备份将在SQL Server计算机上完成** - 它不会**您自己的本地PC! – 2010-04-11 20:17:31

5

你永远不知道你的SqlCommand要使用的连接(这是错误信息的方式说什么,你看过吗?)。要么设置Connection属性,要么使用SqlConnection.CreateCommand首先创建命令。

0

备份SQL Server 2008数据库的C#(100%正确的)

using System.Data.SqlClient; 
try{ 
    SqlConnection con = new SqlConnection(cs.conn()); 
    string database = con.Database.ToString(); 
    string datasource = con.DataSource.ToString(); 
    string connection = con.ConnectionString.ToString(); 
    string file_name =data_loaction+database_name; 
    --- "D:\\Hotel BackUp\\" + database + day + month + year + hour + minute + second + ms + ".bak"; 

    con.Close(); 
    con.Open();     

    string str = "Backup Database [" + database + "] To Disk =N'" + file_name + "'";// With Format;' + char(13),'') From Master..Sysdatabases Where [Name] Not In ('tempdb','master','model','msdb') and databasepropertyex ([Name],'Status') = 'online'"; 

    SqlCommand cmd1 = new SqlCommand(str, con); 
    int s1 = cmd1.ExecuteNonQuery(); 
    con.Close();    
    if (s1 >= -1) 
      MessageBox.Show("Database Backup Sucessfull.", "Hotel Management", MessageBoxButtons.OK, MessageBoxIcon.Information); 
    else{ 
      MessageBox.Show("Database Backup Not Sucessfull.", "Hotel Management", MessageBoxButtons.OK, MessageBoxIcon.Information); 
    } 
} 
+0

这已经有一个可接受的答案,你的似乎没有添加任何东西。 – JamesT 2015-02-04 11:01:21

+0

从来没有说过一段代码是** 100%正确**!它或者是错的,或者你会对它不满...... – tugberk 2015-12-24 19:54:53

相关问题