从Active Directory SQL查询返回System.Object []

时间:2017-12-07 20:06:00

标签: sql ssis active-directory

我正在创建一个需要访问Active Directory的SSIS包。我创建了一个ADO.NET连接并编写了一个选择LDAP查询以撤回记录(见下文)。我能够成功检索数据,但其中一个Active Directory属性返回System.Object []而不是我想要的部门号。有没有办法使用查询成功将System.Object转换为真实数据?提前谢谢。

示例查询:

SELECT department, departmentnumber, sAMAccountName
FROM 'LDAP://example.com' WHERE objectClass='User'

结果:

|department |departmentnumber   |sAMAccountName|
|Hollywood  |System.Object[]    |ceastwood     |

更新:在我的研究之后,我将补充说,如果它返回System.Object,我不相信这个LDAP SQL查询是可以使用的。我找到了许多使用脚本任务执行类似操作的很好的例子HERE

我创建了一个控制台应用程序,并将其构建为将我的Active Directory数据直接插入SQL。我建议按照Stack Over Flow上的文章进行操作。他们帮助我完成了这项任务,尽管它不是我想要的方式。

1 个答案:

答案 0 :(得分:1)

在进一步阅读之前,请确保可以将对象[]解析为字符串[]。

为了便于在我们的环境中使用,我将分享一个示例方法,说明如何将memberOf属性的输出从object []转换为string []:

object[] membership = user.Properties["MemberOf"].Value as object[];
                    if (membership != null)
                    {
                        string[] roles = Array.ConvertAll<object, string>(membership, convertObjectToString);
                        if (roles != null)
                        {
                            foreach (string role in roles)
                                LogInformation.log("Role " + role);
                        }
                        else
                            LogInformation.log("Member Of not found!");
                    }

然而,convertObjectToString()是一个静态方法,如下所述:

private static string convertObjectToString(object obj)
    {
        return (obj == null) ? string.Empty : obj.ToString(); 
    }