0

在我部署一个 .dtsx SSIS 包之后,我可以运行任何查询或 C# 代码来让它在驱动器上洗澡,或者我可以检索部署的 .dtsx 文件。

4

3 回答 3

4

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

在此处输入图像描述

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

别的

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

更新1:-

  1. 为 SSIS 包变量赋值

添加此命名空间 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.阅读XML

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

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

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

4.如果包配置存储在sql server中,则使用以下代码。代码取自收集SSIS包信息

    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 typeC# 中,则加载该 XML 文件并搜索节点。如果存储了 ssis 数据,sql server则运行上面的 sql 并获取所有信息。sql 查询以 xml 类型返回包详细信息,您可以在 C# 中读取这些详细信息并获取所需信息

更新 2:-

如果 SSIS 包部署在 sql server 中,那么下面的代码将帮助您使用 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 namepath和格式descriptionpackage 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
于 2013-01-28T09:23:47.300 回答
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. 在连接选项中选择“集成服务”而不是“数据库引擎”。
  2. Expand Stored Packages - 展开 MSDB 并搜索您的包(与您在保存包时使用的名称相同。)
于 2013-01-28T08:32:14.220 回答
1

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

于 2013-01-28T08:49:48.580 回答