|
Программирование >> Управление учетными записями
Приложение В. 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 г.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |