C# 使用SSIS-源查询active directory
我正在使用SSI访问ldap服务器。玩了一会儿之后,我设法创建了一个OLE-DB连接(不能使用ADO.NET连接)。关于连接本身(在连接管理器中)最关键的部分是我省略了“服务器”,因此该字段是空白的,因为服务器可以切换。提供程序是用于OleDb的.Net提供程序\OLE DB提供程序,用于Microsoft目录服务 到目前为止,它使用以下命令,然后在源中使用:C# 使用SSIS-源查询active directory,c#,sql-server,ssis,ldap,C#,Sql Server,Ssis,Ldap,我正在使用SSI访问ldap服务器。玩了一会儿之后,我设法创建了一个OLE-DB连接(不能使用ADO.NET连接)。关于连接本身(在连接管理器中)最关键的部分是我省略了“服务器”,因此该字段是空白的,因为服务器可以切换。提供程序是用于OleDb的.Net提供程序\OLE DB提供程序,用于Microsoft目录服务 到目前为止,它使用以下命令,然后在源中使用: SELECT extensionAttribute2 FROM 'LDAP://Mydonaimname' WHERE objectCl
SELECT extensionAttribute2 FROM 'LDAP://Mydonaimname' WHERE objectClass='User'
现在是奇怪的部分,也是我的问题:
当我使用ADO NET源代码时,上面的语句与所提到的连接一起工作,但我得到一个警告,因为extensionAttribute2的类型为System.object,ADO NET源代码不支持该类型。
不过预览是正确的
当我尝试使用同一语句并与OLE DB源连接时,当我尝试查看预览时,我得到一个OLE DB错误(遗憾的是,错误消息中没有给出有用的描述,只有一般错误,错误代码为0x0)。尽管环顾四周并进行了尝试,但我没有在那里找到任何东西,因此我的问题是:
正如您所写,我使用了几个来源来获取数据(我无法正确访问AD): -使用第一个示例 -给我举例说明我能得到什么 因此,使用第一个示例: 1) 我已经创建了OLE DB连接管理器。选择提供程序
本机OLE DB/OLE DB provider for Microsoft Directory Services
,并添加我的服务器名
2) 创建变量var1作为对象
3) 然后拖动执行SQL任务
。打开编辑器:为结果集
选择完整结果集
,直接输入
为SQLSourceType
,将旁路准备
设置为真
;选择第一步创建的连接
;给出了SqlStatement
:
从objectClass='User'所在的'LDAP://eurolith dc'中选择ExtensionAttribute2
因为我没有任何从'LDAP://eurolith dc'中选择cn,其中objectClass='User'
另外,在结果集
选项卡中添加了在步骤2中创建的变量,并设置结果名=0
3) 创建了另一个变量变量
作为数据类型对象,稍后将用于查看
4) 为了显示结果,我使用了Foreach循环容器
和脚本任务
。在Foreach循环容器中
我将枚举器
更改为Foreach ADO枚举器
,并选择ADO对象源变量
作为var1
。还将变量映射到新创建的变量
和索引=0
。在这个容器中,我拖动了脚本任务
。在编辑器中,我选择了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
也有一些空值,这就是为什么会出现错误。尝试使用cn
进行检查,您将看到。到目前为止还无法进行测试,因此会问:您是否必须将结果放入变量中?或者是否有可能在数据流本身的下一步中直接使用结果?到哪个变量。如果第一个,当你读广告的时候,那么是的。如果是第二个,我只是用来显示它,那么就没有必要了。我已经成功地在一个脚本中用于查询广告