命名空间“Microsoft.SqlServer”中不存在类型或命名空间名称“Smo”(您是否缺少程序集引用?)

时间:2015-01-02 10:34:51

标签: c# sql-server winforms

我想在Windows窗体应用程序中备份数据库。 我已经将引用添加到所有4个ddls

Microsoft.SqlServer.ConnectionInfo.dll
Microsoft.SqlServer.Management.Sdk.Sfc.dll
Microsoft.SqlServer.Smo.dll
Microsoft.SqlServer.SmoExtended.dll

我的代码是

using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Threading.Tasks;
using Microsoft.SqlServer.Server;
using Microsoft.SqlServer.Management.Sdk.Sfc;
using Microsoft.SqlServer.Smo;
using Microsoft.SqlServer.Smo.SmoExtended;


namespace Lodging
{
    class BackupAndRestoreData
    {            
        public static void BackupDatabase(string backUpFile)
        {
            ServerConnection con = new ServerConnection(@"ANI-PC\SQLEXPRESS");
            Server server = new Server(con);
            Backup source = new Backup();
            source.Action = BackupActionType.Database;
            source.Database = "db_Lodge";
            BackupDeviceItem destination = new BackupDeviceItem(backUpFile,
                                                            DeviceType.File);
            source.Devices.Add(destination);
            source.SqlBackup(server);
            con.Disconnect();
        }
        public static void RestoreDatabase(string backUpFile)
        {
            ServerConnection con = new ServerConnection(@"ANI-PC\SQLEXPRESS");
            Server server = new Server(con);
            Restore destination = new Restore();
            destination.Action = RestoreActionType.Database;
            destination.Database = "MyDataBaseName";
            BackupDeviceItem source = new BackupDeviceItem(backUpFile,
                                                           DeviceType.File);
            destination.Devices.Add(source);
            destination.ReplaceDatabase = true;
            destination.SqlRestore(server);
        }
    }
}

这不会给我错误

using Microsoft.SqlServer.Server;
using Microsoft.SqlServer.Management.Sdk.Sfc;

但是错误:

  

类型或命名空间名称' Smo'名称空间中不存在Microsoft.SqlServer' (你错过了一个程序集引用吗?)

using Microsoft.SqlServer.Smo;
using Microsoft.SqlServer.Smo.SmoExtended;

我该怎么做才能消除此错误?

3 个答案:

答案 0 :(得分:1)

using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;

尝试这两个名称空间。

  

Microsoft.SqlServer.Management.Smo命名空间包含实例   表示SQL Server数据库引擎对象和的对象类   一些表示特定任务的实用程序类,例如脚本。   连接到SQL Server数据库引擎的实例时   已经通过使用Server对象变量建立了对象   可以使用SMO实例对象访问实例。对于   例如,您可以使用Database对象访问数据库   连接的SQL Server数据库引擎实例。所有的实例   类与对象层次结构中的Server类相关。   实用程序类存在于Server类对象层次结构之外   表示特定任务,例如备份或脚本。

以下是article in MSDN

的链接

普通也被广泛使用我建议你阅读它。

答案 1 :(得分:0)

不确定这是否对您有所帮助,但是对于编译错误:

  

命名空间中不存在类型或命名空间名称“XYZ”   'ABC.DEF'(你错过了汇编参考吗?)

我发现以下原因导致该编译错误:

1)如果程序集的目标是稍后的.NET框架(例如4.5),并且您从面向早期.NET框架的应用程序(例如4.0)中引用程序集,那么您可能会遇到此问题。

2)有时,“Client Profile”.NET框架项目无法引用完整的.NET版本程序集,因为Client Profile .NET框架是.NET框架的精简版本。

答案 2 :(得分:0)

安装SMO

SQL Server Management Objects (SMO) Framework是一组对象,旨在对Microsoft SQL Server和Microsoft Azure SQL数据库进行编程管理。

明确指定2017年之前的SQL Server版本时,请安装SQL Server Feature Pack(更多信息in this answer)。

对于SQL Server 2017及更高版本,将SMO作为NuGet软件包安装为per this answer