將 SSIS 包從伺服器保存到本地電腦
現在,我可以使用我的 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); } } }