【问题标题】:Returning System.Object[] from Active Directory SQL Query从 Active Directory SQL 查询返回 System.Object[]
【发布时间】:2017-12-07 20:05:59
【问题描述】:

我正在创建一个需要访问 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 上的文章。他们为我完成这项任务提供了很大帮助,尽管这不是我想要的方式。

【问题讨论】:

  • 如果你使用SysInternals ADExplorer之类的东西,departmentnumber的语法会显示什么?
  • 使用上面的工具(谢谢),在导航到 CN=departmentNumber 时,它有几个属性都具有不同的语法。我应该寻找哪个属性? attributeSyntax 属性语法 = DirectoryString
  • 对于它的价值.. 在数据流 ADO NET 源中,当我预览查询时,它会在该级别显示 System.object,以便排除不会导致问题的数据流目标.

标签: sql ssis active-directory


【解决方案1】:

在进一步阅读之前,请确保 object[] 可以被解析为 string[]。

我将分享一个示例方法,说明如何在我们的环境中将 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(); 
    }

【讨论】:

  • 我试图使用 sql 查询来执行此操作。是通过创建脚本任务成功做到这一点的唯一方法吗?
  • @Clint - 是的,可以实现您想要的。在 Web 上搜索“从 SQL-Server 调用托管代码”,例如 docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/… ;记住——这相当于用针打仗!
  • 哈哈,是的,我同意。我已经开始编写一些 C# 来在脚本任务中执行此操作,但令我困扰的是我无法在 SQL 查询中使用它。感谢您的链接。
  • @Clint - 如果对您有帮助,您也可能希望接受答案。查看如何接受答案 -> meta.stackexchange.com/questions/5234/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
相关资源
最近更新 更多