如何获取SQL JobStep连接字符串

时间:2013-01-27 09:17:39

标签: c# sql sql-server ssis

获得服务器作业后,我得到了每个工作步骤,我希望获得与每个步骤相关的连接字符串,因为在这样的工作中打开SQL管理工作室时可以找到它:

enter image description here

是否有一种合适的方法可以通过C#代码获取每个包的连接字符串?

ServerConnection conn = new ServerConnection("localhost");
//new SqlConnection("data source=localhost;initial catalog=CPEInventory_20101122;integrated security=True;"));
Server server = new Server(conn);
JobCollection jobs = server.JobServer.Jobs;
var stepInformationsDetailsList = new List<StepInformationsDetails>();

foreach (Job job in jobs)
{
    foreach (JobStep jobstep in job.JobSteps)
    {
        stepInformationsDetailsList.Add(new StepInformationsDetails() {
           ServerName = job.Parent.MsxServerName,
           ReportName = job.Name,
           StepName = jobstep.Name,
           Command = jobstep.Command,
           Schedual = jobstep.DatabaseName,
           StepID = jobstep.ID
        });
    }
}
dataGridView1.DataSource = stepInformationsDetailsList;

1 个答案:

答案 0 :(得分:0)

该数据将全部在您的Command变量中。在作业步骤选项卡上覆盖/添加任何内容时,最终结果是传递给dtexec的命令行具有这些值。用户界面只是简单地从msdb.dbo.sysjobsteps表中的命令列中切出参数,将它们链接到各个选项卡。

在本地主机上,此查询应该返回完整的命令行。

SELECT
    JS.command
FROM
    dbo.sysjobs AS SJ
    INNER JOIN dbo.sysjobsteps AS JS
    ON JS.job_id = SJ.job_id
WHERE
    sj.name = 'Concessions made by Simba Auto-Report';

由于覆盖了Connection Manager“Simba Replica ...”的值,因此将显示在命令的输出中。如果是,你会有一个像/SQL "\"\MyFolder\MyPackage\"" /SERVER "\"localhost\sql2008r2\"" /CONNECTION SYSDB;"\"Data Source=SQLDEV01\INT;Initial Catalog=SYSDB;Provider=SQLNCLI10.1;Integrated Security=SSPI;Auto Translate=False;\"" /CHECKPOINTING OFF /REPORTING E这样的字符串/ CONNECTION部分会与你的'Simba Replica ...'值相关联。

我怀疑,但不知道,UI正在通过API Microsoft.SqlServer.Dts.Runtime检查SSIS包,并通过Connections属性识别所有连接管理器,以构建该对话框。