在我部署.dtsx SSIS包后,我可以运行任何查询或C#代码来获取它在驱动器上的浴缸,或者我可以检索已部署的.dtsx文件。
答案 0 :(得分:4)
由于软件包存储在SQL Server中放置的SSIS包上MSDB
所以Right Click
,然后单击Run Package
。
你会得到一个对话框
单击Connection Managers
选项卡,然后更改单个连接的连接字符串。
其他
如果使用xml config file
创建SSIS包,则单击configuration tab
并打开配置文件以了解包的详细信息
更新1: -
添加此命名空间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
格式提供path
,description
,package data
和xml
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访问它。
答案 2 :(得分:1)
您可以通过Visual Studio(或Business Intelligence Development Studio)导入它。创建一个新的SSIS项目,右键单击包,选择import并连接到存储包的SQL Server。