2011-10-05 185 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(); 
} 
} 

这个例程将适用于你的情况。