Программирование >>  Управление учетными записями 

1 2 3 4 [ 5 ] 6


Приложение В. Windows Vista и Windows Server 2008 1727

А теперь давайте воспользуемся системой запросов при построении поисковой функциональности для приложения.

Поставщик OLE DB

Вы можете интегрировать поисковую функциональность в свое приложение, используя поставщик OLE DB для элементов индекса. Создайте простое приложение Windows Forms с элементом TextBox, чтобы дать возможность пользователю вводить запросы, элементом Button для запуска запроса и элементом ListView для отображения результатов, как показано на рис. В.18. Измените свойство View элемента управления ListView на Details, чтобы отобразить всю информацию, введенную пользователем вместе с запросом.


Рис. В.18. Простое приложение с функциональностью поиска

Импортируйте пространство имен System.Data.OleDB и добавьте следующий код в событие Click кнопки Search.

private void buttonSearch Click(object sender, EventArgs e)

try {

listViewResult.Clear();

string indexerConnectionString = provider=Search.CollatorDSO.1; +

EXTENDED PROPERTIES=Application=Windows ;

OleDbConnection connection = new OleDbConnection(

indexerConnectionString); connection.Open();

OleDbCommand command = connection.CreateCommand(); command.CommandText = textBoxQuery.Text; OleDbDataReader reader = command.ExecuteReader();

DataTable schemaTable = reader.GetSchemaTable();

foreach (DataRow row in schemaTable.Rows)

listViewResult.Columns.Add(row[0].ToString());

while (reader.Read())

ListViewItem item = new ListViewItem(reader[0].ToString()); for (int i = 1; i < reader.FieldCount; i++)

item.SubItems.Add(reader[i].ToString());

listViewResult.Items.Add(item);



1728 Часть VII. Приложения

connection.Close(); catch (Exception ex)

MessageBox.Show(ex.Message);

Обратимся к деталям. Индексатор предоставляет поставщика OLE DB Search. CollatorDSO. В строке соединения OLE DB вы можете передать информацию о поставщике и открыть подключение к индексатору.

string indexerConnectionString = provider=Search.CollatorDSO.1; +

EXTENDED PROPERTIES=Application=Windows ; OleDbConnection connection = new OleDbConnection(

indexerConnectionString); connection.Open();

Запрос, используемый с индексатором, читается из элемента управления TeztBox по имени textBoxQuery. Поскольку во время компиляции не известно, какие свойства будут выбраны пользователем, столбцы в элемент управления ListView должны добавляться динамически. Метод GetSchemaTable() класса OldDbDataReader возвращает динамически созданную информацию о схеме, относящуюся к запросу. Каждая строка описывает элемент оператора SELECT, и первый столбец внутри элемента задает его имя. Проходя по каждой строке возвращенной схемы, добавляется новый столбец в элемент управления ListView, причем заголовок столбца устанавливается в имя элемента.

OleDbCommand command = connection.CreateCommand(); command.CommandText = textBoxQuery.Text; OleDbDataReader reader = command.ExecuteReader();

DataTable schemaTable = reader.GetSchemaTable();

foreach (DataRow row in schemaTable.Rows)

listViewResult.Columns.Add(row[0].ToString());

Затем читаются строки из OleDbDataReader. Первый столбец создает новый ListViewItem, а каждый последующий из результирующего набора добавляет подэлемент, который отображается вместе с подробной информацией списочного представления.

while (reader.Read())

ListViewItem item = new ListViewItem(reader[0].ToString()); for (int i = 1; i < reader.FieldCount; i++)

item.SubItems.Add(reader[i].ToString());

listViewResult.Items.Add(item);

Теперь вы можете запустить приложение, ввести запрос и получить результат

(рис. В.19).

SELECT System.ItemName, System.ItemTitle, System.Size FROM SYSTEMINDEX

WHERE System.Size > 1024

В операторе SELECT запроса вы специфицируете свойства, которые должны быть возвращены. System.ItemName, System.ItemTitle и System.Size - все это предопределенные свойства. Вы можете найти другие предопределенные свойства в доку-



Приложение В. Windows Vista и Windows Server 2008 1729

ментации MSDN и TechNet по теме Windows Desktop Search 3.0 properties . Вот некоторые из общих свойств файлов: System.Author, System.Category, System.Company, System.DateCreated, System.DateModified, System.FileName, System.ItemName, System.ItemUrl и System.Keywords. Для аудиофайлов, цифровых фотографий, графических файлов, медиафайлов, документов Office, музыкальных файлов и элементов календаря Outlook определены дополнительные свойства, например, System. Photo.Orientation, System.Photo.DateTaken, System.Music.Artist, System. Music.BeatsPerMinute, System.Music.Mood, System.Calendar.Location, System. Calendar.Duration, System.Calendar.Location.

В конструкции WHERE вы определяете предикаты, такие как сравнения литеральных значений <, >, = и LIKE, условия полнотекстового поиска вроде CONTAINS и FREETEXT, а также предикаты глубины поиска SCOPE и DIRECTORY.


Рис. В.19. Простое поисковое приложение во время выполнения

Расширенный синтаксис запросов

Вряд ли вы пожелаете предоставлять пользователю возможность поиска путем спецификации оператора SELECT - вроде того, что применялось в предыдущем примере. Вы можете создать пользовательский интерфейс, чтобы запрашивать определенные элементы и затем программно строить оператор SELECT. Другой способ позволить пользователям выполнять их собственный поиск состоит в применении расширенного синтаксиса запросов AQS (Advanced Query Syntax).

Расширенный синтаксис запросов позволяет специфицировать поисковые элементы и ограничивать поиск на основе свойств. Например, запрос Wrox date:past week запустит поиск всех элементов, содержащих строку Wrox, которые были изменены в течение последней недели. Wrox date:past week kind:documents ограничит поиск только нужными документами.

Ниже дано несколько примеров того, как можно сузить поиск.

□ Можно ограничить поиск, определив хранилище. Например, store:outlook выдаст только элементы из Outlook. store:file позволит получить элементы только из файловой системы.

□ В поисковой функциональности вы можете специфицировать, какого рода элементы должны попасть в результат, например: kind:text, kind:tasks, kind: contacts, kind:emails и kind:folders.

□ Для ограничения поиска могут быть применены булевские операции. Например, операция OR, использованная в запросе Wrox OR Wiley. date:>11/25/07, позволит найти элементы, датированные после 25 ноября 2007 г.



1 2 3 4 [ 5 ] 6

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика