Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Результаты опроса: Поможете?
да ) 0 0%
конечно ) 0 0%
Голосовавшие: 0. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2014, 23:53   #1
SailarmoonKS
Пользователь
 
Регистрация: 01.10.2014
Сообщений: 11
По умолчанию Прочитать данные с LDAP сервера

Здравствуйте, товарищи.
Помогите пож-та: у нас на работе через почтовый клиент the bat можно получить список сотрудников компании и их параметры(email,телефон и др.)по всей россии с помощью ldap сервера. Настройки простейшие: ip адрес = 192.168.20.20, порт = 389. Больше в клиенте ничего не настраивается. Просматривать не особо удобно. Решил написать программу на C# для считывания всех пользователей в datagridview. Запнулся на процессе чтения данных. В инете особо про это ничего нет. Нашел 1 вариант через OLEDB, и то не работает... вот код:

Код:
OleDbConnection conn = new OleDbConnection("Provider=ADSDSOObject;");
            
conn.Open();
            
string str = "<LDAP://192.168.20.20:389>;(objectClass=*);mail;subtree";
                        
using (OleDbCommand cmd = new OleDbCommand(str, conn))
{
                OleDbDataReader dr = cmd.ExecuteReader();
                int sum = 0;
                
                if (dr.HasRows)
                {                    
                    
                    while (dr.Read())
                    {                         
                         Console.WriteLine(dr.GetName(0));
			 Console.WriteLine(dr.GetValue(0).ToString());
                         sum++;
                    }
                    Console.WriteLine(sum);
                }
                else
                {
                    Console.WriteLine("No rows found.");
                }
                
                dr.Close();
}

Вот такая ошибка при выполнении функции GetValue = Сбой "ADSDSOObject" без сообщения об ошибке, код результата: DB_E_ERRORSOCCURRED(0x80040E21).

Название столбца считывается нормально, а само значение нет...

Помогите решить данную проблему или показать пример как другим способом получить данные из ldap сервера
SailarmoonKS вне форума Ответить с цитированием
Старый 02.10.2014, 08:19   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
dr.GetValue(0).ToString()
Надо на null проверять. А уже потом выводить.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.10.2014, 09:36   #3
SailarmoonKS
Пользователь
 
Регистрация: 01.10.2014
Сообщений: 11
По умолчанию

Проверял функцией ISDBNull. Я просто сокращенный код написал. В итоге выходит, что название столбца выводит, а его значение никак не хочет - выдаёт эту ошибку.
Подключение точно работает, т.к. проверял количество строк, которое получается получить при помощи почтового клиента и при помощи программы с помощью переменной sum.
SailarmoonKS вне форума Ответить с цитированием
Старый 02.10.2014, 11:31   #4
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

А строка подключения не слишком короткая? Может доп параметры нужно указать?

Код:
"Provider=ADSDSOObject;User ID=MyUserID;Password=MyPassword;"
Вы откуда брали пример подключения?

Попробуйте сделать так:
Код:
OleDbConnection conn = new OleDbConnection("Provider=ADSDSOObject;");
string str = "<LDAP://192.168.20.20:389>;(objectClass=*);mail;subtree";
OleDbDataAdapter Adapter = new OleDbDataAdapter(str, conn);

DataSet NewDataset = new DataSet();
NewDataset.Clear();
Adapter.Fill(NewDataset);


// ЛИБО ПОСТРОЧНО
if (NewDataset.Tables.Count > 0)
{
     for (int i = 0; i < NewDataset.Tables[0].Rows.Count; i++)
     {
           var value = NewDataset.Tables[0].Rows[i][0];
           ... доступ также как и к таблице
     }
}

// ЛИБО СРАЗУ ЦЕЛИКОМ
dataGridView1.DataSource = NewDataset.Tables[0];
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.

Последний раз редактировалось WorldMaster; 02.10.2014 в 11:40.
WorldMaster вне форума Ответить с цитированием
Старый 02.10.2014, 11:38   #5
SailarmoonKS
Пользователь
 
Регистрация: 01.10.2014
Сообщений: 11
По умолчанию

Брал отсюда(пример на VB):
http://support2.microsoft.com/kb/187529/ru
SailarmoonKS вне форума Ответить с цитированием
Старый 02.10.2014, 11:40   #6
SailarmoonKS
Пользователь
 
Регистрация: 01.10.2014
Сообщений: 11
По умолчанию

Логин и пароль не нужен, т.к. без них подключается. И на почтовом клиенте The Bat не указывается пароль и логин.
SailarmoonKS вне форума Ответить с цитированием
Старый 02.10.2014, 11:44   #7
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от SailarmoonKS Посмотреть сообщение
Логин и пароль не нужен, т.к. без них подключается. И на почтовом клиенте The Bat не указывается пароль и логин.
А второй вариант?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 02.10.2014, 11:46   #8
SailarmoonKS
Пользователь
 
Регистрация: 01.10.2014
Сообщений: 11
По умолчанию

Ругается на процесс заполнения той же ошибкой:
Adapter.Fill(NewDataset);

Такое чувство, как будто C# не понимает что за тип данных приходит от сервера и не знает как их обработать, чтобы записать в datagridview или просто представить обычной строкой.
SailarmoonKS вне форума Ответить с цитированием
Старый 02.10.2014, 11:56   #9
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от SailarmoonKS Посмотреть сообщение
Такое чувство, как будто C# не понимает что за тип данных приходит от сервера и не знает как их обработать, чтобы записать в datagridview или просто представить обычной строкой.
Значит траблы в запросе. Попробуйте через SELECT вытащить.
А заявление про шарп это неприлично даже.

Чего то нигде не сказано что порт нужно в строке адреса сервера писать. Может без него попробовать?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.

Последний раз редактировалось WorldMaster; 02.10.2014 в 12:02.
WorldMaster вне форума Ответить с цитированием
Старый 02.10.2014, 12:01   #10
SailarmoonKS
Пользователь
 
Регистрация: 01.10.2014
Сообщений: 11
По умолчанию

Вот так пробую - то же самое...
string str2 = "SELECT mail From 'LDAP://192.168.20.20:389' WHERE objectClass='top'";
SailarmoonKS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Данные пользователя через LDAP Abdukhafiz PHP 1 06.03.2014 15:07
Как прочитать данные с фотоаппарата aha Общие вопросы Delphi 5 19.04.2010 09:57
Прочитать данные, записанные на C Claptrap Общие вопросы Delphi 0 03.04.2010 20:14
Прочитать данные из Excel viter.alex Microsoft Office Excel 7 03.03.2009 14:35
Как прочитать данные из Repeater? posdnyaa БД в Delphi 0 07.04.2008 09:50