Запрос ADO к LDAP. Как правильно передать параметр objectGUID. #804872


#0 by ELEA26
Как правильно передать параметр objectGUID Код: Без where objectGUID  = ? - работает, но потом перебирать кучу строк - не айс. А получить по одному GUID никак не получается.
#1 by Ёпрст
не проще динамический запрос слепить и забить на параметр ?
#2 by Ёпрст
query = "SELECT ADsPath,objectGUID,sAMAccountName,userPrincipalName FROM 'LDAP://"+Адрес+"/"+ОбщиеФункции.Root+"' where objectGUID  = "+гуидтвой+"'";
#3 by ELEA26
Вот как "гуидтвой" подставлять? Как он выглядеть должен? Строка? С знаками {} с дефизами? Или как varbinary 0x0d836833fблабла? Я по всякому ставил. Или с ошибками валится или пустой запрос.
#4 by Ёпрст
подставляй так, как она хранится в ИБ.
#5 by Ёпрст
скорее, там будет 0x0d836833fблабла?
#6 by ELEA26
в ИБ это реквизит строка: {E2B589DD-DE54-475E-BCD4-DD894F6BF9EE} Добывается ранее при создании таким же запросом. Но возвращается COM объект. Чтобы его сохранить делаю так: В чистом виде rs.Fields("objectGUID").Value хранить не получается. Как из строки обратно сделать COM объект и тем более как потом вставить в запрос не понятно. Пробовал обратно в COM так: Но тоже не катит.
#7 by Филиал-msk
Оно в CAST умеет?
#8 by ELEA26
Да, валится с ошибкой: {ОбщийМодуль.ОбменLDAP.Модуль}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Provider): Произошла одна или несколько ошибок во время обработки команды.
#9 by ELEA26
И cast и convert в условии пробовал. Тоже не получается :(
#10 by Филиал-msk
а теперь в выборке попробуй чтобы строку получить.
#11 by ELEA26
я в выборке пробовал. без условия, просто добавлял в выборку: cast(objectGUID as varchar) as test пробовал и cast(objectGUID as uniqueidentifier) as test и convert(varchar,objectGUID,1) и все это в разных комбинациях. Все время запрос падает с ошибкой из
#12 by Ёпрст
подставляй в запрос просто строкой  0x0d836833.....
#13 by Ёпрст
текст запроса должен быть такой в результате:
#14 by Ёпрст
ну и как получить hex из 10-ого числа, наверное , напишешь :)
#15 by Ёпрст
Или вот, гений тут распинался
#16 by ELEA26
Вот из отладчика: выпало в исключение, текст ошибки тот же: {ОбщийМодуль.ОбменLDAP.Модуль}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Provider): Произошла одна или несколько ошибок во время обработки команды.
#17 by Ёпрст
без where хотя бы работает ?
#18 by ELEA26
да. И даже другой запрос по логину: отлично работает. sAMAccountName - строка. А вот objectGUID - OctetString А как с этим OctetString работать - не понимаю...
#19 by Ёпрст
не понял, у тебя objectGUID  бинари16 или OctetString  ?
#20 by ELEA26
да вот фиг пойми. В ActiveDirectoryExplorer - пишет, что OctetString все же.
#21 by Ёпрст
да нифига :)
#22 by Ёпрст
И это, а нафига тебе вообще впёрся objectGUID? Пользуй просто guid
#23 by ELEA26
Всмысле? В LDAP есть только этот.
#24 by Ёпрст
есть там и поле guid
#25 by Ёпрст
ghjdthm
#26 by Ёпрст
проверь
#27 by Ёпрст
Вот так еще, работает? where objectGUID=90395FB99AB51B4A9E96 86C66CB18D99
#28 by Ёпрст
или так ? where objectGUID={b95f3990-b59a-4a1b-9e96-86c66cb18d99}
#29 by ELEA26
то не находит, а если без кавычек: where objectGUID={b95f3990-b59a-4a1b-9e96-86c66cb18d99} то с ошибкой выпадает.
#30 by mexanik_96
не взлетит ибо тип октет стринг, те бинарь. нужно через обертку делать. делал c использованием с#.
#31 by mexanik_96
+  var entry = new DirectoryEntry(strDEntry, username, password);                 if (entry != null)                     {                         Guid guid = new Guid((Byte[])(Array)entry.Properties["objectGUID"][0]); strDEntry = LDAP:\и поехали
#32 by ELEA26
Все же: where objectGUID='90395FB99AB51B4A9E96 86C66CB18D99' С кавычками одиночными. Но порядок байтов надо менять местами (от обычного строкового ГУИД). 1 - 4 в 4 - 1 5-6 в 6-5 7-8 в 8-7 остальные по порядку. Хотя у меня такое ощущения, что такой вариант я пробовал. Провозился знатно :(
#33 by Йохохо
а что за запись такая? '90395FB99AB51B4A9E96 86C66CB18D99'
#34 by ELEA26
Ну гуид в ввиде констаны в запросе.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С