使用SMO与C#Windows窗体应用程序备份SQL Server 2005数据库时,备份失败
这是我用来备份数据库的代码,正如你所看到的,代码是相同的。错误发生在我填写变量之后。我得到的错误是 服务器“RITZEL-PC\SQLEXPRESS”的备份失败 备份功能:使用SMO与C#Windows窗体应用程序备份SQL Server 2005数据库时,备份失败,c#,sql-server-2005,database-backups,C#,Sql Server 2005,Database Backups,这是我用来备份数据库的代码,正如你所看到的,代码是相同的。错误发生在我填写变量之后。我得到的错误是 服务器“RITZEL-PC\SQLEXPRESS”的备份失败 备份功能: public void BackupDatabase(String databaseName, String userName, String password, String serverName, String destinationPath) { Backup sqlBac
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);
}
数据库信息
我还不允许发布图片,但我已经上传了一个屏幕截图。请参见此处:不要再次分配字符串值,只需删除它们并按如下方式调用备份:
BackupSqlDatabase("YourDataBaseName","sa","password","ServerName","C:\\YourDataBaseName.bak");
不要再次分配字符串值,只需删除它们并按如下方式调用备份:
BackupSqlDatabase("YourDataBaseName","sa","password","ServerName","C:\\YourDataBaseName.bak");
为了备份数据库,SQL Server进程正在运行,需要对备份目标文件夹具有正确的文件夹权限 根据我的经验,除非SQL server进程以本地管理员身份运行,否则它将无权写入根目录 如果打开SSMS并尝试将数据库备份到目标路径,则可能会遇到相同的问题
尝试将备份文件夹更改为驱动器根目录或“我的文档”文件夹以外的其他文件夹。为了备份数据库,SQL Server进程正在运行,需要对备份目标文件夹具有正确的文件夹权限 根据我的经验,除非SQL server进程以本地管理员身份运行,否则它将无权写入根目录 如果打开SSMS并尝试将数据库备份到目标路径,则可能会遇到相同的问题
尝试将备份文件夹更改为驱动器根目录或“我的文档”文件夹以外的其他文件夹。数据库名应是连接到SQL Server Express时数据库的逻辑数据库名,例如
MYDATABASE
,而不是.mdf
文件的整个文件名。我认为SMO不允许您备份单独的.mdf
文件如果您查看我在上面发布的屏幕截图,我会放置一个我要备份的数据库的数据库信息的屏幕截图。这是sqlserver2005中数据库节点上显示的名称。我做错了吗?我是说:你不能用SMO备份一个“独立的”.mdf
文件。您需要将.mdf
文件附加到SQL Server Express,为其指定一个逻辑数据库名称,然后将该逻辑数据库名称用于SMO备份。整个“attach.mdf on the fly”功能有点混乱,坦率地说,不应该使用它,它将在SQLServer2012(“Denali”)中停止使用databaseName
应该是数据库连接到SQL Server Express时的逻辑数据库名称,例如MYDATABASE
,而不是.mdf
文件的整个文件名。我认为SMO不允许您备份单独的.mdf
文件如果您查看我在上面发布的屏幕截图,我会放置一个我要备份的数据库的数据库信息的屏幕截图。这是sqlserver2005中数据库节点上显示的名称。我做错了吗?我是说:你不能用SMO备份一个“独立的”.mdf
文件。您需要将.mdf
文件附加到SQL Server Express,为其指定一个逻辑数据库名称,然后将该逻辑数据库名称用于SMO备份。整个“attach.mdf on the fly”功能有点混乱,坦率地说,不应该使用它,它将在SQLServer2012(“Denali”)中停止使用