2016-08-22 3 views
1

SMOを使用してデータベース間でデータをコピーしているためです。自分のDBヘルパークラスを使用しています。私はデータを転送するときに例外を取得しています。Integration Servicesコンポーネントがインストールされていないか、使用する権限がありません

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#で既存のものから新しいデータベースを作るという他の代替手段を見つけたら、コードを共有してください。

答えて

0

ヒントには誤りがあります。 SQL Server Integration Servicesのコードを使用しようとしていますが、SQL Server Expressには含まれていません。

また、これらのことはT-SQLを使う方がずっと簡単です。簡単に新しい空のデータベースを作成し、オブジェクトをスクリプトすることもできます。または、データベースをバックアップして復元します。

それがより良いdba.stackexchange.com

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

で求められますし、あなたことを確認して、他のサーバー上に

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

を復元するように私はstackoverflowの中でここにコードを投稿してはなりませんあなたがC#でやってみる前に、あなたがSQLでやっていることを理解してください。以前の質問で推奨されているように、SQLCMDを使用してSQLのすべてを手動で実行した場合、SQLについてもっと学びます。

+0

私はこのコードをこの質問でも使用しましたが、人々の投票を助ける代わりにこのコードを使用しました。私は人々が初心者でそうする理由を知らない。お手伝いができれば、この質問をご覧ください。 @Mike http://stackoverflow.com/questions/39019461/run-a-script-on-existing-database-from-sql-file-in-c-sharp/39019576 – Umar

+0

私は、最も単純なSQLの例を追加しました。データベースのバックアップと復元。 C# – Mike

+0

から試してみる前に、これがSQLで動作することを確認してください。@マイクありがとう、それは最も簡単でした。私は3つのメソッドを読んで、1つはSMO、もう1つは私が提案したもの、3つ目はSQLcmdでのプロセスメソッドでした。これがうまくいくことを願っています! – Umar

0

SQL Server 2012 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 

にアセンブリを参照します。

関連する問題