我使用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作为错误代码)当我尝试查看预览时。尽管四处寻找并尝试我没有找到任何东西,所以我的问题是:
答案 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 Container
和Script task
。在Foreach Loop Container
我将Enumerator
更改为Foreach ADO Enumerator
,并将ADO object source variable
选为var1
。还将变量映射到新创建的Variable
和Index=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
,您会看到。