1

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

在此处输入图像描述

是否有合适的方法通过 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;
4

1 回答 1

0

这些数据都将在您的 Command 变量中。当您在作业步骤选项卡上覆盖/添加任何内容时,最终结果是传递给 dtexec 的命令行具有这些值。UI 只是从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';

由于您没有覆盖连接管理器“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属性识别所有连接管理器以构建该对话框。

于 2013-01-28T16:00:47.120 回答