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

The type or namespace name 'Smo' does not exist in the namespace 'Microsoft.SqlServer' (are you missing an assembly reference?)

我想在 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;

但给出错误:

The type or namespace name 'Smo' does not exist in the namespace 'Microsoft.SqlServer' (are you missing an assembly reference?)

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

我应该怎么做才能消除这个错误?

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

试试这两个命名空间。

The Microsoft.SqlServer.Management.Smo namespace contains the instance object classes that represent SQL Server Database Engine objects and some utility classes that represent specific tasks, such as scripting. When a connection to the instance of the SQL Server Database Engine has been established by using a Server object variable, objects on the instance can be accessed by using the SMO instance objects. For example, you can use the Database object to access databases on the connected instance of SQL Server Database Engine. All the instance classes are related to the Server class in the object hierarchy. Utility classes exist outside of the Server class object hierarchy and represent specific tasks, such as backup or scripting.

这里是link到article in MSDN

常用的也很广泛,推荐大家看看。

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

The type or namespace name 'XYZ' does not exist in the namespace 'ABC.DEF' (are you missing an assembly reference?)

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

1) 如果程序集面向更高版本的 .NET 框架(例如 4.5),并且您从面向早期 .NET 框架(例如 4.0)的应用程序引用该程序集,那么您可能会遇到此问题。

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

安装 SMO

SQL Server Management Objects (SMO) Framework 是一组对象,旨在以编程方式管理 Microsoft SQL 服务器和 Microsoft Azure SQL 数据库。

如果明确针对 2017 之前的 SQL 服务器版本,请安装 SQL 服务器功能包(更多信息 in this answer)。

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