2011-10-05 187 views
1

我遇到以下C#代碼執行備份的問題,特別是在連接字符串中。連接字符串和sql備份

的代碼如下:

private void BK() 
{ 
    string strconn = @"Data Source=.\SQLEXPRESS; AttachDbFilename=|DataDirectory|\db.mdf;Integrated Security=True;User Instance=True"; 
    SqlConnection conn = new SqlConnection(); 
    conn.ConnectionString = strconn; 

    try { 
     //Query per backup 
     string queryBK = "BACKUP DATABASE db TO DISK ='C:\\Program Files\\Microsoft SQLServer\\MSSQL10.SQLEXPRESS\\MSSQL\\Backup\\db.bak' WITH INIT, SKIP, CHECKSUM"; 

     SqlCommand cmdBK = new SqlCommand(queryBK, conn); 
     conn.Open();    
     cmdBK.ExecuteNonQuery(); 
     MessageBox.Show("backup effettuato"); 
    } 
    catch (Exception ex) { 
     MessageBox.Show(ex.Message, "ERRORE", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
    finally { 
     conn.Close(); 
    } 
} 

此代碼的開發PC上,但如果我在另一臺PC上安裝我的應用程序,它拋出這個錯誤:

The database does not exist. Verify that the name has been entered correctly. INTERRUPTION ANOMALOUS BACKUP DATABASE.

我想強調的是,這個字符串在我的PC和PC測試中都可以很好地運行INSERT,DELETE,UPDATE 。

如果我更換連接字符串:

string strconn = @"Data Source=.\SQLEXPRESS; Database = db;Trusted_Connection =True"; 

字符串作品在我的開發機器上,但不是在測試機上。它會拋出以下錯誤:

Can not open database requested by the login. Login failed. Login failed for user Pina-PC \ Pina

+0

測試服務器是如何設置的?運行代碼的哪種類型的應用程序(Web應用程序,Windows桌面應用程序)? – Asken

回答

1

親愛的你可以用這種方式使用你的代碼。

private void BK() 
{ 
string strconn = @"Data Source=.\SQLEXPRESS; AttachDbFilename=|DataDirectory|\db.mdf;Integrated Security=True;User Instance=True"; 
SqlConnection conn = new SqlConnection(); 
conn.ConnectionString = strconn; 

try { 
// First get the db name 

    conn.Open(); 

     string dbname; 

     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = conn; 
     dbname = cmd.Connection.Database.ToString();  


    //Query per backup 
    string queryBK = "BACKUP DATABASE " + dbname + " TO DISK ='C:\\Program Files\\Microsoft SQLServer\\MSSQL10.SQLEXPRESS\\MSSQL\\Backup\\db.bak' WITH INIT, SKIP, CHECKSUM"; 

    SqlCommand cmdBK = new SqlCommand(queryBK, conn); 
    conn.Open();    
    cmdBK.ExecuteNonQuery(); 
    MessageBox.Show("backup effettuato"); 
} 
catch (Exception ex) { 
    MessageBox.Show(ex.Message, "ERRORE", MessageBoxButtons.OK, MessageBoxIcon.Error); 
} 
finally { 
    conn.Close(); 
} 
} 

這個例程將適用於你的情況。