Es gab ein weiteres Objekt unter der Einschränkung, PrecedenceExecutable, das das "vorhergehende" Objekt darstellt, und es hat auch eine ID-Eigenschaft. Ich bin mir nicht sicher, wie ich es verpasst habe. Ich musste es nur frisch betrachten, wie es scheint.
foreach (var precedenceConstraint in package.PrecedenceConstraints)
{
Microsoft.SqlServer.Dts.Runtime.TaskHost constrainedExecutable = (Microsoft.SqlServer.Dts.Runtime.TaskHost)precedenceConstraint.ConstrainedExecutable;
Microsoft.SqlServer.Dts.Runtime.TaskHost precedenceExecutable = (Microsoft.SqlServer.Dts.Runtime.TaskHost)precedenceConstraint.PrecedenceExecutable;
string taskName = constrainedExecutable.Name;
string constrainedExecutableId = constrainedExecutable.ID;
string precedenceConstraintId = precedenceConstraint.ID;
Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ExecuteSQLTask executeSqlTask = (Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ExecuteSQLTask)constrainedExecutable.InnerObject;
}