Sql-Server

將 SSIS 包從伺服器保存到本地電腦

  • August 15, 2018

現在,我可以使用我的 C# 程序將 SSIS 包從本地電腦上傳到 SQL Server:

Microsoft.SqlServer.Dts.Runtime.Application app;
app = new Microsoft.SqlServer.Dts.Runtime.Application();


string pkg = @"C:\Temp\myPackage.dtsx";
Package loadedPkg = app.LoadPackage(pkg, null);

app.SaveToSqlServerAs(loadedPkg, null, "myNewPackage", "myServer", null, null);

這很好用。現在我想做與此相反的操作,將一個 SSIS 包從 SQL Server 保存到我的本地電腦。我在這裡使用 Microsoft 文件:https ://docs.microsoft.com/en-us/dotnet/api/microsoft.sqlserver.dts.runtime.application?view=sqlserver-2017

它似乎沒有任何方法可以保存到電腦。我看到了“載入”方法,但我無法讓它們工作。我認為他們只是準備一個要上傳到伺服器的包,就像我之前的範例一樣。這可以通過相同的“應用程序”類實現嗎?

一起試試 LoadFromSqlServer 和 SaveToDtsServer 的組合

如果我對您的理解正確,您希望將包從文件載入到 SQL Server。然後,執行相反的操作,將包從 SQL Server 寫入文件。我認為魔法可能在下面的程式碼片段中:

pkgIn = app.LoadFromSqlServer("\\UsingExecuteProcess", "yourserver", null, null, null);  
app.SaveToDtsServer(pkgIn, null, @"File System\myFolder2", "yourserver");  

這是一些我沒有測試過的程式碼,它是以下兩篇文章的組合。這裡的程式碼將 UsingExecuteProcess.dtsx 載入到 SQL Server。然後,程式碼使用 LoadFromSQLServer 將包返回到變數 pkgIn FROM SQL Server。最後,SaveToDtsServer 將 pkgIn 寫回文件系統(同樣還沒有編譯,因此可能存在一兩個語法錯誤需要解決——我基本上結合了列出的兩篇文章中的程式碼)。

筆記:

如果您的本地電腦確實通過網路,您可以使用 UNC (\MyComputer\MyShare\MyPackage.dtsx) 命名約定通過網路將文件從 SQL Server 保存到您的系統 - 而不是使用本地驅動器號僅在 SQL Server 上可用。

   using System;  
   using System.Collections.Generic;  
   using System.Text;  
   using Microsoft.SqlServer.Dts.Runtime;  

   namespace LoadFromSQLServerTest  
   {  
       class Program  
       {  
           static void Main(string[] args)  
           {  
               // The variable, pkg, points to the location  
               // of the ExecuteProcess sample installed with  
               // the SSIS package samples.  
               string pkg = @"C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services\Package Samples\ExecuteProcess Sample\ExecuteProcess\UsingExecuteProcess.dtsx";  
               Application app = new Application();  
               Package loadedPkg = app.LoadPackage(pkg, null);  

               // Save the package to SQL Server.  
               app.SaveToSqlServer(loadedPkg, null, "yourserver", null, null);  

               // The package can now be viewed in the   
               // Microsoft SQL Server Management Studio, in the   
               // Integration Services / Stored Packages / MSDB folder,  
               // with a name of UsingExecuteProcess.  
               Package pkgIn = new Package();  
               pkgIn = app.LoadFromSqlServer("\\UsingExecuteProcess", "yourserver", null, null, null);  
               app.SaveToDtsServer(pkgIn, null, @"File System\myFolder2", "yourserver");  
               DateTime pkgCreation = pkgIn.CreationDate;  
               Console.WriteLine("Creation Date = {0}", pkgCreation);  
           }  
       }  
   }  

https://docs.microsoft.com/en-us/dotnet/api/microsoft.sqlserver.dts.runtime.application.loadfromsqlserver?redirectedfrom=MSDN&view=sqlserver-2017#Microsoft_SqlServer_Dts_Runtime_Application_LoadFromSqlServer_System_String_System_String_System_String_System_String_Microsoft_SqlServer_Dts_Runtime_IDTSEvents_

https://docs.microsoft.com/en-us/dotnet/api/microsoft.sqlserver.dts.runtime.application.savetodtsserver?view=sqlserver-2017

引用自:https://dba.stackexchange.com/questions/215032