我在哪里可以找到部署的SSIS包?

时间:2013-01-28 08:26:03

标签: c# sql sql-server ssis

在我部署.dtsx SSIS包后,我可以运行任何查询或C#代码来获取它在驱动器上的浴缸,或者我可以检索已部署的.dtsx文件。

3 个答案:

答案 0 :(得分:4)

由于软件包存储在SQL Server中放置的SSIS包上MSDB所以Right Click,然后单击Run Package。 你会得到一个对话框

enter image description here

单击Connection Managers选项卡,然后更改单个连接的连接字符串。

其他

如果使用xml config file创建SSIS包,则单击configuration tab并打开配置文件以了解包的详细信息

更新1: -

  1. 为SSIS包变量分配值
  2. 添加此命名空间Microsoft.SqlServer.Dts.Runtime;

    Application app = new Application();
    Package package = null;
    package = app.LoadPackage(deployed ssis package path,null) //Load DTSX path
    //Access the SSIS variables
    pkg.Connections["sConn"].ConnectionString = strSourceConn;
    pkg.Connection["dConn"].ConnectionString = strDestConn;
    

    2.Reading XML

    每个dtsx包的底层代码是xml。因此,您可以使用C#加载XML,然后遍历每个节点并查找信息。

    3.从dtsx.config文件获取信息。

    正如我上面所说,ssis包可能有一个存储所有信息的xml配置文件。这个xml文件在C#中更容易阅读,然后读取point 2中提到的整个DTSX包

    4.如果包配置存储在sql server中,请使用以下代码。代码取自Collecting Information of SSIS package

        SELECT    Props.Prop.query('.') as PropXml,
        Props.Prop.value('declare namespace p1="www.microsoft.com/SqlServer/Dts";
        string(./@p1:Name)','nvarchar(max)')  as PropName,
        Props.Prop.value('.', 'nvarchar(max)') as PropValue
        FROM    (
        SELECT    CAST(pkgblob.BulkColumn AS XML) pkgXML
        FROM    OPENROWSET(bulk 'C:\tmp\MyPkg.dtsx',single_blob) AS pkgblob
        ) t
        CROSS    APPLY pkgXML.nodes('declare namespace DTS="www.microsoft.com/SqlServer/Dts";
                        /DTS:Executable/DTS:Property') Props(Prop)
    

    结论: -

    如果使用配置文件创建SSIS包。找到它的存储位置。 如果它存储在XML configuration type中,则在C#中加载该XML文件并搜索节点。如果ssis数据存储在sql server中,则运行上面的sql并获取所有信息。 sql查询以xml类型返回包详细信息,您可以在C#中读取它并获取所需信息

    更新2: -

    如果在sql server中部署了SSIS包,那么下面的代码将帮助您使用C#

    检索包详细信息
    public class SSISDetails
    {
        public string PackageData { get; set; }
        public string PackageName { get; set; }
    }
    
      string storedProc = string.Empty;
            List<SSISDetails> _pkgcol = new List<SSISDetails>();
            string connectionString = "server=localhost;Integrated Security=SSPI";
            using (var conn = new SqlConnection(connectionString))
            using (var command = new SqlCommand("SSISDetails", conn)
            {
                CommandType = CommandType.StoredProcedure
            })
            {
    
                conn.Open();
                SqlDataReader reader = command.ExecuteReader();
    
                    while (reader.Read ())
                    {
                        _pkgcol.Add(new SSISDetails() 
                        {
                           //Please don't write the code like the one below accessing 
                           //columns  using index .
                            PackageName =reader[2].ToString (),
                            PackageData =reader[10].ToString ()
                        });
    
                    }
    
                conn.Close();
            }
    
            foreach (var item in _pkgcol.Where (a=>a.PackageName =="YourPackageName") )
            {
                //read the item.PackageData and using Linq to xml retrieve the nodes which
                //you want
            }
    

    回收信息的存储过程是: - 以下sql代码以package name格式提供pathdescriptionpackage dataxml

     Create Procedure SSISDetails
     as 
     begin
     with ChildFolders
     as
     (
       select PARENT.parentfolderid, PARENT.folderid, PARENT.foldername,
        cast('' as sysname) as RootFolder,
        cast(PARENT.foldername as varchar(max)) as FullPath,
        0 as Lvl
       from msdb.dbo.sysssispackagefolders PARENT
       where PARENT.parentfolderid is null
       UNION ALL
       select CHILD.parentfolderid, CHILD.folderid, CHILD.foldername,
       case ChildFolders.Lvl
            when 0 then CHILD.foldername
            else ChildFolders.RootFolder
        end as RootFolder,
        cast(ChildFolders.FullPath + '/' + CHILD.foldername as varchar(max))
            as FullPath,
        ChildFolders.Lvl + 1 as Lvl
       from msdb.dbo.sysssispackagefolders CHILD
       inner join ChildFolders on ChildFolders.folderid = CHILD.parentfolderid
       )
       select F.RootFolder, F.FullPath, P.name as PackageName,
       P.description as PackageDescription, P.packageformat, P.packagetype,
       P.vermajor, P.verminor, P.verbuild, P.vercomments,
       cast(cast(P.packagedata as varbinary(max)) as xml) as PackageData
       from ChildFolders F
       inner join msdb.dbo.sysssispackages P on P.folderid = F.folderid
       order by F.FullPath asc, P.name asc;
    
    end
    

答案 1 :(得分:2)

如果部署到文件系统,则默认程序包位置为: C:\ Program Files \ Microsoft SQL Server \ 100 \ DTS \ Packages(SQL 2008)或C:\ Program Files \ Microsoft SQL Server \ 90 \ DTS \ Packages(SQL 2005)。

如果部署到sql server,它将存储在msdb数据库中,因此您可以从SQL Server Management Studio访问它。

  1. 在连接选项中选择“Integration Services”,而不是“数据库引擎”。
  2. 展开存储的包 - 展开MSDB并搜索您的包(使用您在保存包时使用的相同名称。)

答案 2 :(得分:1)

您可以通过Visual Studio(或Business Intelligence Development Studio)导入它。创建一个新的SSIS项目,右键单击包,选择import并连接到存储包的SQL Server。