使用SSIS - 查询活动目录的源

时间:2014-11-04 09:35:47

标签: c# sql-server ssis ldap

我使用SSIS访问ldap服务器。在玩了一下后,我设法创建了一个OLE-DB连接(不能使用ADO.NET连接)。关于连接本身(在连接管理器中)最关键的部分是我省略了服务器",因此该字段为空,因为服务器可以切换。提供程序是用于Microsoft目录服务的OleDb \ OLE DB提供程序的.Net提供程序。

到目前为止,使用以下命令,然后在源中使用:

SELECT extensionAttribute2 FROM 'LDAP://Mydonaimname' WHERE objectClass='User'

现在出现了一个奇怪的部分,也是我的问题:

当我使用ADO NET Source时,上面提到的连接的语句工作但是我得到一个警告,因为extensionAttribute2的类型为System.object,ADO NET Source不支持。 但是预览是正确的。

当我尝试相同的语句和与OLE DB源的连接时,我得到一个OLE DB错误(遗憾的是在错误消息中没有给出有用的描述,只有一般错误,0x0作为错误代码)当我尝试查看预览时。尽管四处寻找并尝试我没有找到任何东西,所以我的问题是:

  1. 有没有办法让OLE DB Source工作?
  2. 如果没有,那么有没有办法让ADO NET Source中的警告消失?

1 个答案:

答案 0 :(得分:2)

我已经使用了几个来源来尝试获取数据(我没有直接访问AD):

Processing Active Directory Information in SSIS - 使用了第一个例子

Universal Connector Integration Details - 给了我一些我能得到的例子

所以使用第一个例子:

1)我创建了OLE DB Connection Manager。选定的提供商Native OLE DB/OLE DB Provider for Microsoft Directory Services并添加了我的服务器名称;

2)将变量var1创建为Object;

3)然后拖动Execute SQL task。已打开的编辑器:为Full result set选择ResultSet,为Direct input选择SQLSourceType,将BypassPrepare设为True;第一步创建的选定Connection;给了SqlStatement

SELECT ExtensionAttribute2 FROM 'LDAP://eurolith-dc' WHERE objectClass='User'

也测试了这个,因为我没有任何
SELECT cn FROM 'LDAP://eurolith-dc' WHERE objectClass='User'

同样在Result Set标签中添加了在步骤2中创建的变量并设置了Result Name = 0;

3)创建另一个变量Variable作为数据类型Object,稍后将用于视图;

4)为了显示结果,我使用了Foreach Loop ContainerScript task。在Foreach Loop Container我将Enumerator更改为Foreach ADO Enumerator,并将ADO object source variable选为var1。还将变量映射到新创建的VariableIndex=0。在这个容器里面,我拖了Script task。在编辑器中,我选择了ReadOnlyVariables=User::Variable。打开脚本并粘贴此代码:

    String localVar = Convert.ToString(Dts.Variables["User::Variable"].Value);
    if (!String.IsNullOrEmpty(localVar))
    {
        MessageBox.Show(Dts.Variables["User::Variable"].Value.ToString());
    }

我正在检查变量是否为NULL,因为我认为我在ExtensionAttribute2中没有任何信息。所以我查看了cn

这个例子对我有用。

我想,你还有一些ExtensionAttribute2的NULL值,以及你遇到错误的原因。尝试查看cn,您会看到。