未安装Integration Services组件,或者您没有使用该组件的权限

本文关键字:组件 权限 Integration 安装 Services 或者 | 更新日期: 2023-09-27 18:03:18

因为我使用SMO将数据从一个数据库复制到另一个数据库。我使用了自己的DB助手类。当我传输数据时,我得到了异常。

集成服务组件未安装或您没有使用它的权限。

我的代码如下:
public class DBHelper
{
    #region Private Variables
    private static string sourceSQLServer;
    private static string destinationSQLServer;
    private static string sourceDatabase;
    private static string destinationDatabase;
    #endregion
    #region Properties
    /// <summary>
    /// SourceSQLServer Holds Instance Name of Source SQL Server Database Name
    /// </summary>
    public static string SourceSQLServer
    {
        get { return DBHelper.sourceSQLServer; }
        set { DBHelper.sourceSQLServer = value; }
    }
    /// <summary>
    /// DestinationSQLServer Holds Instance Name of Destination SQL Server Database Name
    /// </summary>
    public static string DestinationSQLServer
    {
        get { return DBHelper.destinationSQLServer; }
        set { DBHelper.destinationSQLServer = value; }
    }
    /// <summary>
    /// SourceDatabase Holds Source Database 
    /// </summary>
    public static string SourceDatabase
    {
        get { return DBHelper.sourceDatabase; }
        set { DBHelper.sourceDatabase = value; }
    }
    /// <summary>
    /// DestinationDatabase Holds Destination Database Name
    /// </summary>
    public static string DestinationDatabase
    {
        get { return DBHelper.destinationDatabase; }
        set { DBHelper.destinationDatabase = value; }
    }
    #endregion
    #region Static Methods
    /// <summary>
    ///  CopyDatabase Copies Database 
    /// </summary>
    /// <param name="CopyData">True if Want to Copy Data otherwise False</param>
    public static void CopyDatabase(bool bCopyData)
    {
        //Set Source SQL Server Instance Information
        Server server = new Server(DBHelper.SourceSQLServer);
        //Set Source Database Name [Database to Copy]
        Database database = server.Databases[DBHelper.SourceDatabase];
        //Set Transfer Class Source Database
        Transfer transfer = new Transfer(database);
        //Yes I want to Copy All the Database Objects
        transfer.CopyAllObjects = true;
        //In case if the Destination Database / Objects Exists Drop them First
        transfer.DropDestinationObjectsFirst = true;
        //Copy Database Schema
        transfer.CopySchema = true;
        //Copy Database Data Get Value from bCopyData Parameter
        transfer.CopyData = bCopyData;
        //Set Destination SQL Server Instance Name
        transfer.DestinationServer = DBHelper.DestinationSQLServer;
        //Create The Database in Destination Server
        transfer.CreateTargetDatabase = true;
        //Set Destination Database Name
        Database ddatabase = new Database(server, DBHelper.DestinationDatabase);
        //Create Empty Database at Destination
        ddatabase.Create();
        //Set Destination Database Name
        transfer.DestinationDatabase = DBHelper.DestinationDatabase;
        //Include If Not Exists Clause in the Script
        transfer.Options.IncludeIfNotExists = true;
        //Start Transfer
        transfer.TransferData();
        //Release Server variable
        server = null;
    }
    #endregion
}

在Main函数中,我调用这个

DBHelper.SourceSQLServer = @"DESKTOP-PCEOPRM'SQLEXPRESS";
//Set Your Database Name Here (To Be Copied or Scripted)
DBHelper.SourceDatabase = "MetisEmptyDB";
////Set Destination SQL Server Name Here
DBHelper.DestinationSQLServer = @"DESKTOP-PCEOPRM'SQLEXPRESS";
//Set New Database Name Here 
DBHelper.DestinationDatabase = "NewDb";
//Set True if you want to copy Data
//Set False if you want to copy Only Schema
DBHelper.CopyDatabase(true);
Console.WriteLine("Scripting Finished");

提前感谢。

未安装Integration Services组件,或者您没有使用该组件的权限

如果你在c#中找到了其他可以从现有数据库中创建新数据库的替代方法,请也分享代码。

对于我来说,这个错误消失了,当我改变我的依赖从SQL Server 2008 Express到SQL Server 2012 Express。

我引用了

中的程序集
C:'Program Files (x86)'Microsoft SQL Server'110'SDK'Assemblies

C:'Program Files (x86)'Microsoft SQL Server'100'SDK'Assemblies

提示在错误中。您正在尝试使用SQL Server集成服务的代码,但不包括在SQL Server Express中。

使用T-SQL这些事情也容易得多。您可以轻松地创建新的空数据库并编写对象脚本。或者备份和恢复数据库。

我不应该把代码贴在这里的stackoverflow,因为它会更好地问在dba.stackexchange.com

BACKUP DATABASE AdventureWorks2012   
 TO DISK = 'C:'SQLServerBackups'AdvWorksData.bak' 
 WITH FORMAT;

和在其他服务器上还原

RESTORE DATABASE AdventureWorks2012  
  FROM DISK = 'C:'SQLServerBackups'AdventureWorks2012.bak';

在尝试使用c#之前,请确保您了解在SQL中要做什么。如果您按照前面问题中的建议使用SQLCMD手动执行所有SQL,则可以了解更多SQL知识。