Integration Services 组件未安装或您无权使用它
The Integration Services component is not installed or you do not have permission to use it
因为我使用 SMO 将数据从一个数据库复制到另一个数据库。我使用了我自己的数据库助手 class。传输数据时出现异常。
Integration Services 组件未安装或您没有使用它的权限。
我的代码如下:
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");
提前致谢。如果您发现任何其他替代方法可以从 C# 中的现有数据库创建新数据库,请也分享代码。
线索就在错误中。您正在尝试使用 SQL Server Integration Services 的代码,但 SQL Server Express 中不包含该代码。
此外,使用 T-SQL 这些事情也容易得多。您可以轻松地创建新的空数据库并编写对象脚本。或者备份和恢复数据库。
我不应该 post Whosebug 中的代码,因为在 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 的更多信息。
对我来说,当我将依赖项从 SQL Server 2008 Express 更改为 SQL Server 2012 Express 时,这个错误就消失了。
我引用了
中的程序集
C:\Program Files (x86)\Microsoft SQL Server0\SDK\Assemblies
不是
C:\Program Files (x86)\Microsoft SQL Server0\SDK\Assemblies
如果您能够更改依赖关系,那么它就可以工作。
因为我使用 SMO 将数据从一个数据库复制到另一个数据库。我使用了我自己的数据库助手 class。传输数据时出现异常。
Integration Services 组件未安装或您没有使用它的权限。
我的代码如下:
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");
提前致谢。如果您发现任何其他替代方法可以从 C# 中的现有数据库创建新数据库,请也分享代码。
线索就在错误中。您正在尝试使用 SQL Server Integration Services 的代码,但 SQL Server Express 中不包含该代码。
此外,使用 T-SQL 这些事情也容易得多。您可以轻松地创建新的空数据库并编写对象脚本。或者备份和恢复数据库。
我不应该 post Whosebug 中的代码,因为在 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 的更多信息。
对我来说,当我将依赖项从 SQL Server 2008 Express 更改为 SQL Server 2012 Express 时,这个错误就消失了。
我引用了
中的程序集C:\Program Files (x86)\Microsoft SQL Server0\SDK\Assemblies
不是
C:\Program Files (x86)\Microsoft SQL Server0\SDK\Assemblies
如果您能够更改依赖关系,那么它就可以工作。