2012-01-15 32 views
1

这是我的代码来备份我的数据库我跟着this tutorial,你可以看到,代码是相同的。填写变量后出现错误。我得到的错误是使用SMO备份SQL Server 2005数据库与C#Windows窗体应用程序,备份失败

服务器'RITZEL-PC \ SQLEXPRESS'的备份失败。

备份功能:

public void BackupDatabase(String databaseName, String userName, String password,  String serverName, String destinationPath) 
    { 
     Backup sqlBackup = new Backup(); 

     sqlBackup.Action = BackupActionType.Database; 
     sqlBackup.BackupSetDescription = "ArchiveDataBase:" + DateTime.Now.ToShortDateString(); 
     sqlBackup.BackupSetName = "Archive"; 

     sqlBackup.Database = databaseName; 

     BackupDeviceItem deviceItem = new BackupDeviceItem(destinationPath, DeviceType.File); 
     ServerConnection connection = new ServerConnection(serverName, userName, password); 
     Server sqlServer = new Server(connection); 

     Database db = sqlServer.Databases[databaseName]; 

     sqlBackup.Initialize = true; 
     sqlBackup.Checksum = true; 
     sqlBackup.ContinueAfterError = true; 

     sqlBackup.Devices.Add(deviceItem); 
     sqlBackup.Incremental = false; 

     sqlBackup.ExpirationDate = DateTime.Now.AddDays(3); 
     sqlBackup.LogTruncation = BackupTruncateLogType.Truncate; 

     sqlBackup.FormatMedia = false; 

     sqlBackup.SqlBackup(sqlServer); 
    } 

按钮点击

private void BackUp_Btn_Click(object sender, EventArgs e) 
    { 
     String databaseName = @"D:\MY_THESIS\WORKING FILES\NNIT-RMS.mdf"; 
     String userName = "NNIT-Admin"; 
     String password = "password"; 
     String serverName = @"RITZEL-PC\SQLEXPRESS"; 
     String destinationPath = @"D:\"; 

     BackupDatabase(databaseName,userName,password,serverName,destinationPath); 

    } 

数据库信息 我不允许张贴图片,但是我已经上传的屏幕截图。在这里看到:http://img268.imageshack.us/img268/9250/sqlg.jpg

+0

当数据库连接到SQL Server Express时,'databaseName'应该是数据库的**逻辑数据库名称** 'MYDATABASE' - 而不是** .mdf'文件的整个文件名。我不认为SMO允许你备份一个单独的'.mdf'文件 – 2012-01-15 10:26:52

+0

如果你看看我上面发布的屏幕截图,我放置了一个我想备份的数据库的数据库信息的屏幕截图。这是sqlserver2005中数据库节点上出现的名称。我做错了吗? – RMSP 2012-01-15 10:35:55

+0

我在说:你不能用SMO备份“独立”的'.mdf'文件。您需要**将'.mdf'文件附加到您的SQL Server Express,给它一个** logical **数据库名称,然后将该逻辑数据库名称用于SMO备份。这整个“随时”附加.mdf“功能有点混乱,坦率地说不应该使用 - 并且将在SQL Server 2012(”Denali“)中停用。 – 2012-01-15 10:37:45

回答

0

不要分配再次字符串值u只是删除它们,这样调用备份:

BackupSqlDatabase("YourDataBaseName","sa","password","ServerName","C:\\YourDataBaseName.bak"); 
1

为了备份数据库,过程中运行SQL Server作为需要有备份所针对的文件夹上的正确文件夹权限。

根据我的经验,除非SQL服务器进程作为本地管理员运行,否则它将不具有写入根目录的权限。

如果您打开SSMS并尝试将数据库备份到目标路径,则可能会遇到同样的问题。

尝试将备份文件夹更改为驱动器根目录或我的文档文件夹以外的其他文件夹。