Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SMO备份SQL&;C#?_C#_.net_Sql Server_Backup_Smo - Fatal编程技术网

使用SMO备份SQL&;C#?

使用SMO备份SQL&;C#?,c#,.net,sql-server,backup,smo,C#,.net,Sql Server,Backup,Smo,我正在使用以下代码备份SQL数据库: void BackupDatabase(string sConnect, string dbName, string backUpPath) { using (SqlConnection cnn = new SqlConnection(sConnect)) { cnn.Open(); dbName = cnn.Database.ToString(); ServerConnection sc =

我正在使用以下代码备份SQL数据库:

void BackupDatabase(string sConnect, string dbName, string backUpPath)
{
    using (SqlConnection cnn = new SqlConnection(sConnect))
    {
        cnn.Open();
        dbName = cnn.Database.ToString();

        ServerConnection sc = new ServerConnection(cnn);
        Server sv = new Server(sc);

        // Create backup device item for the backup
        BackupDeviceItem bdi = new BackupDeviceItem(backUpPath, DeviceType.File);

        // Create the backup informaton
        Microsoft.SqlServer.Management.Smo.Backup bk = new Backup();
        bk.PercentComplete += new PercentCompleteEventHandler(percentComplete);
        bk.Devices.Add(bdi);
        bk.Action = BackupActionType.Database;
        bk.PercentCompleteNotification = 1;
        bk.BackupSetDescription = dbName;
        bk.BackupSetName = dbName;
        bk.Database = dbName;
        //bk.ExpirationDate = DateTime.Now.AddDays(30);
        bk.LogTruncation = BackupTruncateLogType.Truncate;
        bk.FormatMedia = false;
        bk.Initialize = true;
        bk.Checksum = true;
        bk.ContinueAfterError = true;
        bk.Incremental = false;

        // Run the backup
        bk.SqlBackup(sv);
    }
}
在我的系统(Win7 x64)中工作正常,但在目标系统(WinXP SP3 x86)中,我收到以下错误:



我怎样才能修好它?

谢谢。

32位和64位的sql server dll不同

看起来您的项目正在引用64位dll。当您尝试在只有32位dll可用的计算机上运行它时,会出现“找不到文件”/“无法加载dll”类型错误


如果要在32位计算机上使用此功能,应参考32位版本的sql server dll。

如果签出Win7计算机(GAC)上的程序集目录,将看到一个名为Microsoft.SqlServer.ConnectionInfo的条目。(浏览到我的机器上的
%windir%\assembly
)它看起来像这样:

就我而言,我使用的是10.0.0.0版。在您的情况下,您至少会看到版本9.0.242.0,因为这是您的程序编译的依据(我发现您不太可能没有从GAC引用dll)。如果两台计算机上安装的版本不相同,则已发现问题,需要相应地更新客户端库。我认为你可能在XP机器上运行了一个更新的版本,因为你刚刚在那里安装了2008


如果您签出后需要更多帮助,可以在此处发表评论。

显然,您需要在服务器上安装程序集。尝试SQL Server客户端安装?是的,我在目标系统中安装了
SQL Express 2008 R2
。没错,我使用的是x64版本,但目标系统是x86。在哪里可以下载x86 windows的较新版本?您想将此问题指向Bhaiji。不过,我很确定这是一个版本问题,因为您无法在每台机器上安装正确的32位或64位版本-安装程序会解决这个问题。那么,我如何修复它呢?我的意思是如何解决版本问题?我会首先检查不同的版本号,并在这里报告它们,同时确保让我们知道是否有多个版本在任何一台机器上运行。您将在%windir%\assembly中看到所有这些。我已经检查了
%windir%\assembly
。我有Microsoft.SqlServer.ConnectionInfo的9.0.242.0版和10版。我从
%windir%\assembly
手动卸载了版本9:-(现在我的系统中也出现了错误!!!请指导我。您需要将32位dll从32位计算机复制到开发人员计算机,并引用它们,而不是64位dll。请注意,您的程序将仅在32位计算机上运行