【问题标题】:SQL Backing up with SMO & C#?使用 SMO 和 C# 进行 SQL 备份?
【发布时间】:2010-10-17 14:02:53
【问题描述】:

我正在使用以下代码备份 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) 中我收到以下错误:



我该如何解决它?
谢谢。

【问题讨论】:

  • 显然,您需要在服务器上安装程序集。尝试安装 SQL Server 客户端?
  • 是的,我在目标系统中安装了SQL Express 2008 R2

标签: c# .net sql-server backup smo


【解决方案1】:

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

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

如果您在查看此内容后需要更多帮助,可以在此处发表评论。

【讨论】:

  • 你说得对,我使用的是 x64 版本,但目标系统是 x86。我在哪里可以下载 x86 windows 的较新版本?
  • 您想将此问题指向 Bhaiji。但是我很确定这是一个版本问题,因为您无法在每台机器上安装正确的 32 位或 64 位版本 - 安装程序会解决这个问题。
  • 那么,我该如何解决呢?我的意思是如何解决版本问题?
  • 我会首先检查不同的版本号并在此处报告它们,还请务必让我们知道是否有多个版本在任何一台机器上运行。您将在 %windir%\assembly 中看到所有这些内容。
  • 我检查了%windir%\assembly。我有版本 9.0.242.0 和版本 10 的 Microsoft.SqlServer.ConnectionInfo。我手动从%windir%\assembly 卸载了版本 9 :-( 现在我的系统也出现错误!!!请指导我。
【解决方案2】:

32位和64位的sql server dll不同。

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

如果您希望它在 32 位机器上工作,您应该参考 32 位版本的 sql server dll。

【讨论】:

  • 您需要将 32 位 dll 从 32 位机器复制到您的开发者机器并引用它们而不是 64 位 dll。注意你的程序只能在 32 位机器上运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多