获得服务器作业后,我得到了每个工作步骤,我希望获得与每个步骤相关的连接字符串,因为在这样的工作中打开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;
答案 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属性识别所有连接管理器,以构建该对话框。