Продолжается подписка на наши издания! Вы не забыли подписаться?

Как объединить несколько источников данных?

Автор: Klaus Salchner
Опубликовано: 20.10.2008

Введение

На современных предприятиях разные типы данных хранятся в различных хранилищах. Реляционные данные обычно лежат в БД SQL Server или Oracle. Многие корпоративные приложения имеют собственные БД с собственными данными и моделями данных. Информация о пользователях и их учетные записи хранятся в каталогах типа Active Directory или Active Directory Application Mode (подробнее об этом можно прочитать по адресу http://www.developerland.com/CSharpGeneral/ActiveDirectory/124.aspx). Меньшие объемы данных хранятся в таблицах Excel или базах данных Microsoft Access. У каждого предприятия есть множество файлов – документы Word, таблицы Excel, HTML-документы и многое другое – хранящихся в файловой системе. Обычно для индексации файлов, хранящихся в файловой системе или на Web-сервере, используется Microsoft Indexing Server. Microsoft Indexing Server создает каталог с индексом и предоставляет интерфейс SQL-запросов, который упрощает поиск по этому индексу.

Проблема, стоящая перед предприятиями, заключается в предоставлении полного и простого доступа к таким данным, хранящимся в самых разных источниках. Как выполнять поиск по всем этим источникам, не создавая множества разных интерфейсов или сложных поисковых механизмов? Хорошие новости заключаются в том, что большинство этих источников данных поддерживают SQL. Диалекты SQL слегка различаются от источника к источнику. Например, службы каталогов наподобие Active Directory, предоставляют возможность запросить данные, но не позволяют изменить, обновить или удалить их с помощью SQL. Это же верно и для SQL в Microsoft Indexing Server. Но большинство источников данных предоставляют основные возможности SQL-запросов. Это позволяет создать один SQL-запрос, работающий с несколькими источниками данных. Эта статья показывает, как это делается.

Связываем другие источники данных с Microsoft SQL Server

Microsoft SQL Server содержит возможность подключения к другим источникам данных, понимающим язык запросов SQL. Enterprise Manager в SQL Server содержит (слева) навигационную панель "SQL Server groups", показывающую все доступные серверы БД. По умолчанию она показывает локальный сервер БД как "(local)". Можно подключить другие источники данных к индивидуальным серверам БД. Разверните ветку сервера БД, нажав на "+", и вы найдете подветку с названием Security". Раскройте ее, и вы найдете подветку с названием "Linked Servers". Раскройте "Linked Servers", и вы увидите все источники данных, подключенные к данному серверу БД.

Чтобы подключить новый источник данных, щелкните правой кнопкой по "Linked Servers" и выберите "New Linked Server" из контекстного меню. В диалоге "Linked Server Properties" можно ввести название для связанного сервера, и указать, хотите ли вы подключить еще одну БД SQL Server или другой источник данных. Если выбрать "SQL Server", то имя связанного сервера должно быть именем БД SQL Server. Например, если у вас есть еще одна БД SQL Server, работающая на машине Enterprise-Minds, можно задать в качестве имени связанного сервера "Enterprise-Minds". Если выбрать "Other data source", нужно будет выбрать из списка существующих провайдеров данных, например, "Microsoft Jet 4.0 OLE Provider". В зависимости от выбранного провайдера, вам понадобится ввести название продукта, источник данных, строку провайдера, местоположение и каталог. После этого нажмите ОК, чтобы создать подключение к новому источнику данных. Он появится в "Linked Servers" под назначенным вами именем.

Связываем SQL Server с каталогом

SQL Server можно связать с каталогом, например, с Active Directory или Active Directory Application Mode. Создайте связанный сервер в Enterprise Manager и дайте ему осмысленное название, например, "Active Directory Link". Выберите "Other data source" и провайдера "OLE DB Provider for Microsoft Directory Services". В качестве названия продукта введите "Active Directory Services" а в качестве источника данных укажите "adsdatasource". Развернув новый связанный сервер, вы найдете два доступных пункта – Tables и Views, то есть SQL Server позволяет просматривать таблицы и представления, имеющиеся в этом источнике данных. Однако провайдер данных "OLE DB Provider for Microsoft Directory Services" не предоставляет таблиц и представлений. Из-за этого вы получите сообщение об ошибке "Error 7301: Could not obtain a required interface from OLEDB provider ADsDSOObject". Эту ошибку можно проигнорировать, она не помешает обращаться к данным через SQL.

Важно запускать сервис "MSSQLSERVER" под той учетной записью, которая имеет доступ к каталогу. Если запустить сервис под учетной записью "local system", при обращении к источнику данных с запросом вы получите следующее сообщение об ошибке:

Server: Msg 7321, Level 16, State 2, Line 1
An error occurred while preparing a query for 
         execution against OLE DB provider 'ADsDSOObject'.
OLE DB error trace [OLE/DB Provider 'ADsDSOObject' 
                    CommandPrepare::Prepare returned 0x80040e14].

Поэтому, если каталог исполняется на локальной машине, и пользователь "DirectoryUser" имеет доступ к нему, сервис "MSSQLSERVER" нужно запускать именно от лица этой учетной записи Если же каталог исполняется в каком-то другом месте домена, и доступ к нему разрешен пользователю домена "DomainUser", запускать "MSSQLSERVER" нужно под этой учетной записью.

Связываем SQL Server с каталогом Microsoft Indexing Server

Связываем SQL Server с БД Microsoft Access

Как обращаться с запросами к связанным серверам?

Как обратиться с запросом к каталогу?

Как обратиться с запросом к каталогам Indexing Server?

Как обращаться к таблице Excel?

Заключение

Эта статья описывает, как можно подключить к SQL Server множество разных источников данных. Она описывает по шагам, как подключить SQL Server к каталогам Active Directory Application Mode, каталогам Microsoft Indexing Server, БД Microsoft Access и таблицам Microsoft Excel.

Microsoft SQL Server позволяет подключиться к различным источникам данных использовать один общий интерфейс запросов при работе с ними. Это упрощает разработку приложений, обращающихся с запросами ко многим хранилищам данных. Такая возможность не слишком хорошо известна сообществу разработчиков. Ее использование может существенно упростить ваши приложения, если вам нужно обращаться с запросами ко многим источникам данных.


Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
........................
"С полным содержанием данной статьи можно ознакомиться в печатной версии журнала"

Copyright © 1994-2016 ООО "К-Пресс"