Visual studio поиск в базе данных
Цель урока: Изучить основные принципы работы с базой данных. Краткое описание реляционной модели баз данных. Работа с базой данных (создание таблиц, связей в VS 2012). Команды INSERT, UPDATE, DELETE, SELECT. Использование LinqToSql и Linq. Создание репозитария, IRepository, SqlRepository.
Что такое БД
Реляционная база данных — база данных, основанная на реляционной модели данных. Реляционность – это отношения (связи) от англ. relation.
Таблицы
- у таблицы есть имя (уникальное)
- нет двух одинаковых строк
- столбцы имеют разные наименования (нет двух одинаковых столбцов)
- порядок строк в таблице произвольный (т.е. не надо учитывать порядок строк, если не задана сортировка)
- Имя столбца
- Тип данных для этого столбца
Связи
- Первичный ключ – это набор столбцов (атрибутов) таблицы, однозначно определяющих уникальность строки. Обычно это одно поле, называется ID. Оно является автоикрементным, т.е. при попытке добавления записи, там автоматически вставляется 1, 2, 3, 4… n+1, где n – это значение последнего добавленного ID.
- Внешний ключ – это набор столбцов (атрибутов) таблицы, которые однозначно определяют уникальность строки в другой таблице. Опять же это обычно одно поле, названное [Имя таблицы]ID. Но не является автоинкрементным.
- Прописана связь между первичным ключом и внешним ключом.
- Один-к-одному. Т.е. одной строке в таблице соответствует одна строка в другой таблице. Это редко используется, но используется. Например, в одной таблице данные о пользователе, а в другой — дополнительные данные о том же пользователе. Такой вариант необходим, чтобы манипулировать, по необходимости, меньшим количеством данных.
- Один-ко-многим. Одной строк в таблице A соответствует одна или несколько строк в таблице B. Но одной строке в таблице B соответствует только одна строка в таблице A. В этом случае в таблице B существует внешний ключ, который однозначно определяет запись в таблице A.
- Многие-ко-многим. Одной строке в таблице А соответствует одна или несколько строк в таблице В, что истинно и в обратном. В данном случае создается дополнительная таблица со своим первичным ключом, и двумя внешними ключами к таблице A и B.
Создание простой схемы в БД
Создадим БД в VS 2012:
Назовем её LessonProject, и добавим 3 таблицы Role User и UserRole.
Создадим таблицу Role:
Для строковых значений используем тип nvarchar(n), где n – максимальная длина строки, обычно используется от 50 до 500. Для больших текстовых строк используется nvarchar(MAX).
Устанавливаем первичный ключ:
Задаем для ID автоинкремент:
Подобным образом создаем таблицу User:
Поле | Тип поля |
ID | int |
nvarchar(150) | |
Password | nvarchar(50) |
AddedDate | datetime |
ActivatedDate | datetime (null) |
ActivatedLink | nvarchar(50) |
LastVisitDate | datetime (null) |
AvatarPath | nvarchar(150) (null) |
Создаем таблицу UserRole:
Поле | Тип поля |
ID | int |
UserID | int |
RoleID | int |
Добавляем новую связь, нажав Add. Добавление связей происходит в таблице, где находятся внешние ключи. Раскрываем вкладку Tables and Columns и выставляем таблицу с первичным ключом, и выбираем внешний ключ в текущей таблице UserRole.
В свойствах INSERT And UPDATE Specification выставляем On Update/On Delete свойства Cascade:
Это необходимо для того, чтобы при изменении/удалении столбца из таблицы Role все связанные с этой строкой строки таблицы UserRole должны быть изменены или удалены.
Аналогичную связь мы устанавливаем с таблицей User.
Таким образом, таблицы Role и User имеют отношения многие ко многим через таблицу UserRole. Т.е. у одного пользователя может быть больше одной роли, и одна и та же роль может быть у нескольких пользователей.
SELECT, INSERT, UPDATE, DELETE.
В реляционных базах данных используется язык запросов SQL.
Есть 4 основные команды для манипулирования данными — SELECT, INSERT, UPDATE, DELETE
SELECT – для выбора данных и таблиц.
Пример:
INSERT — Добавление строк в таблицу
Пример:
UPDATE – изменение значений в таблице
Пример:
DELETE – удаление строк из таблицы
Пример:
LinqToSQL и Linq.
Создадим проект LessonProject.Model для работы с БД типа ClassLibrary.
Добавляем LINQ to SQL Classes тип, называем LessonProejctDb.dbml
Открываем объект, выделяем все таблицы и мышкой переносим на холст:
- классы, готовые к использованию в работе с БД
- визуальное отображение таблиц и связей
Добавим несколько данных в таблицу Role и User:
1 | admin | Админ |
2 | customer | Заказчик |
ID | UserID | RoleID |
1 | 1 | 1 |
2 | 1 | 2 |
3 | 2 | 2 |
Создадим консольный проект Lesson3 и подключим LessonProject.Model. Добавим сборку System.Configuration и System.Data.Linq. Проинициализируем context и выведем данные о ролях:
Для добавления строки в Role делаем так:
Для удаления строки в Role делаем так:
Для изменения данных делаем так:
Для манипуляции данных используется язык запросов Linq. Мы рассмотрим только некоторые основные функции Linq. Linq применяется для типов реализующий интерфейс IQueryable<>
-
.Where() – основная функция фильтрации. Возвращает тип IQueryable. Условие внутри должно возвращать булево значение (bool).
Создание репозитория IRepository, SqlRepository.
Собственно с БД мы уже можем работать, только теперь нужно отделить модель данных от конкретной реализации, т.е. наши контроллеры про context и System.Data.Linq вообще не должны ничего знать.
Для этого создадим интерфейс IRepository, где будет дан доступ к данным, а также выведены методы для создания, изменения и удаления этих данных.
Реализацию назовем SqlRepository. Так как мы с данным контекстом SqlRepository не хотим особо связывать, то добавим Ninject модуль в проект LessonProject.Model:
Создадим класс SqlRepository:
Прежде, чем реализовать доступ ко всем таблицам, создание, удаление и изменение, подумаем о том, что файл этот будет выглядеть громадным и неуклюжим. Таким кодом будет управлять тяжело физически. Так что сделаем отдельную папку SqlRepository и SqlRepository класс сделаем partial, а в папке создадим реализации интерфейса IRepository, разбитые по каждой таблице. Назовем файл Role:
Небольшой проект содержит от 10 до 40 таблиц, большой проект от 40, и всё это хотелось бы как-то автоматизировать. Создадим несколько сниппетов, для IRepository и для SqlRepository. Сниппеты – это уже готовые шаблоны кода, которые вызываются с помощью intelliSence, и позволяют быстро создавать код.
Сниппеты
Для IRepository таблиц, создадим table.snippet:
Для SqlRepository создадим сниппет sqlTable.snippet:
Для того, чтобы добавить code-snippet. откроем TOOLS -> Code Snippet Manager… (Ctrl-K, B). В окне нажимаем Import и импортируем оба сниппета в My Code snippet:
Finish, OK.
Используем для таблиц User и UserRole.
Осталось прописать только поля для Update [имя таблицы], но это уже меньше работы.
Proxy
Как видим, классы, которые мы используем, являются partial, поэтому их можно дополнить. Создадим, подобно SqlRepository, папку Proxy, где будем размещать partial классы. Например, для класса User создадим метод, который автоматически генерирует строку, требуемую для активации пользователя:
Добавим строку доступа к БД в web.Config:
Проинициализируем работу с БД в Ninject:
Применяем InRequestScope(). Т.е. каждый запрос будет использовать отдельный объект SqlRepository. Это позволит избежать коллизий при исполнении.Объявляем IRepository в контроллере:
To search for specific records in a dataset, use the FindBy method on the DataTable, write your own foreach statement to loop over the table's Rows collection, or use LINQ to DataSet.
Dataset case sensitivity
Within a dataset, table and column names are case-insensitive by default — that is, a table in a dataset called "Customers" can also be referred to as "customers." This matches the naming conventions in many databases, including SQL Server. In SQL Server, the default behavior is that the names of data elements cannot be distinguished only by case.
Unlike datasets, XML documents are case-sensitive, so the names of data elements defined in schemas are case-sensitive. For example, schema protocol allows the schema to define a table called "Customers" and a different table called "customers." This can result in name collisions when a schema that contains elements that differ only by case is used to generate a dataset class.
Case sensitivity, however, can be a factor in how data is interpreted within the dataset. For example, if you filter data in a dataset table, the search criteria might return different results depending on whether the comparison is case-sensitive. You can control the case sensitivity of filtering, searching, and sorting by setting the dataset's CaseSensitive property. All the tables in the dataset inherit the value of this property by default. (You can override this property for each individual table by setting the table's CaseSensitive property.)
Locate a specific row in a data table
To find a row in a typed dataset with a primary key value
To locate a row, call the strongly typed FindBy method that uses the table's primary key.
In the following example, the CustomerID column is the primary key of the Customers table. This means that the generated FindBy method is FindByCustomerID . The example shows how to assign a specific DataRow to a variable by using the generated FindBy method.
To find a row in an untyped dataset with a primary key value
Call the Find method of a DataRowCollection collection, passing the primary key as a parameter.
The following example shows how to declare a new row called foundRow and assign it the return value of the Find method. If the primary key is found, the contents of column index 1 are displayed in a message box.
Find rows by column values
To find rows based on the values in any column
Data tables are created with the Select method, which returns an array of DataRows based on the expression passed to the Select method. For more information about creating valid expressions, see the "Expression Syntax" section of the page about the Expression property.
The following example shows how to use the Select method of the DataTable to locate specific rows.
Access related records
When tables in a dataset are related, a DataRelation object can make the related records available in another table. For example, a dataset containing Customers and Orders tables can be made available.
You can use a DataRelation object to locate related records by calling the GetChildRows method of a DataRow in the parent table. This method returns an array of related child records. Or, you can call the GetParentRow method of a DataRow in the child table. This method returns a single DataRow from the parent table.
This page provides examples using typed datasets. For information about navigating relationships in untyped datasets, see Navigating DataRelations.
If you are working in a Windows Forms application and using the data-binding features to display data, the designer-generated form might provide enough functionality for your application. For more information, see Bind controls to data in Visual Studio. Specifically, see Relationships in Datasets.
The following code examples demonstrate how to navigate up and down relationships in typed datasets. The code examples use typed DataRows ( NorthwindDataSet.OrdersRow ) and the generated FindByPrimaryKey ( FindByCustomerID ) methods to locate a desired row and return the related records. The examples compile and run correctly only if you have:
An instance of a dataset named NorthwindDataSet with a Customers table.
An Orders table.
A relationship named FK_Orders_Customers relating the two tables.
Additionally, both tables need to be filled with data for any records to be returned.
To return the child records of a selected parent record
Call the GetChildRows method of a specific Customers data row, and return an array of rows from the Orders table:
To return the parent record of a selected child record
Call the GetParentRow method of a specific Orders data row, and return a single row from the Customers table:
Довольно распространенным сценарием приложения является отображение выбранных данных на форме. Например, вам может потребоваться отобразить заказы для определенного клиента или сведения о конкретном заказе. В таком сценарии пользователь вводит в форму информацию, после чего выполняется запрос, включающий в себя эти введенные пользователем данные в качестве параметра; таким образом, данные выбираются на основе параметризированного запроса. Запрос возвращает только те данные, которые удовлетворяют введенным пользователем условиям. Это пошаговое руководство показывает, как создать запрос, возвращающий клиентов из определенного города, и изменить пользовательский интерфейс, чтобы пользователи могли ввести название города и нажать кнопку для выполнения запроса.
Использование параметризованных запросов помогает сделать приложение эффективным, так как позволяет базе данных заниматься своей непосредственной задачей — быстрой фильтрацией записей. И наоборот, если запросить всю таблицу базы данных, передать ее по сети и использовать логику приложения для поиска записей, ваше приложение станет медленным и неэффективным.
Можно добавить параметризованные запросы в любой TableAdapter (и элементы управления для приема значений параметров и выполнения запроса) с помощью диалогового окна Построитель условий поиска . Откройте диалоговое окно, выбрав команду Добавить запрос в меню Данные (или на любом смарт-теге адаптера таблицы).
В данном пошаговом руководстве представлены следующие задачи.
Создание и Настройка источника данных в приложении с помощью мастера настройки источника данных .
Задание типа сброса элементов в окне Источники данных .
Создание отображающих данные элементов управления с помощью перетаскивания элементов из окна Источники данных на форму.
Добавление элементов управления для отображения данных на форме.
Завершение работы с диалоговым окном Построитель условий поиска .
Ввод параметров в форму и выполнение параметризованного запроса.
Предварительные требования
Необходимо установить рабочую нагрузку " Хранение и обработка данных ". См. раздел Изменение Visual Studio.
в этом пошаговом руководстве используется SQL Server Express LocalDB и образец базы данных Northwind.
если у вас нет SQL Server Express LocalDB, установите его на странице загрузки SQL Server Expressили с помощью Visual Studio Installer. в Visual Studio Installer можно установить SQL Server Express LocalDB как часть рабочей нагрузки хранения и обработки данных или как отдельный компонент.
Установите учебную базу данных Northwind, выполнив следующие действия.
в Visual Studio откройте окно обозреватель объектов SQL Server . (SQL Server обозреватель объектов устанавливается как часть рабочей нагрузки хранения и обработки данных в Visual Studio Installer.) разверните узел SQL Server . щелкните правой кнопкой мыши экземпляр LocalDB и выберите создать запрос.
Откроется окно редактора запросов.
скопируйте скрипт Transact-SQL Northwind в буфер обмена. этот сценарий T-SQL создает базу данных Northwind с нуля и заполняет ее данными.
вставьте скрипт T-SQL в редактор запросов, а затем нажмите кнопку выполнить .
По истечении короткого времени выполнение запроса завершается и создается база данных Northwind.
создание приложения Windows Forms
Создание источника данных
На этом шаге Мастер настройки источника данных используется для создания источника данных из базы данных.
Чтобы открыть окно Источники данных , в меню данные выберите команду отобразить источники данных.
В окне Источники данных выберите Добавить новый источник данных, чтобы запустить Мастер настройки источника данных.
На странице Выбор типа источника данных выберите элемент База данных и нажмите Далее.
На странице Выбор подключения к базе данных выполните одно из следующих действий:
Если подключение к учебной базе данных Northwind доступно в раскрывающемся списке, то выберите его.
Выберите Новое подключение для открытия диалогового окна Добавить/изменить подключение.
Если базе данных требуется пароль, выберите параметр для включения конфиденциальных данных и нажмите кнопку Далее.
На странице Сохранение подключения в файле конфигурации приложения нажмите кнопку Далее.
Разверните узел Таблицы на странице Выбор объектов базы данных.
Выберите таблицу Клиенты и нажмите Готово.
Объект NorthwindDataSet добавляется в проект, и таблица Клиенты отображается в окне Источники данных.
Создание источника данных
На этом шаге Мастер настройки источника данных используется для создания источника данных из базы данных.
Чтобы открыть окно Источники данных , используйте быстрый поиск (CTRL + Q) и найдите Источники данных.
В окне Источники данных выберите Добавить новый источник данных, чтобы запустить Мастер настройки источника данных.
На странице Выбор типа источника данных выберите элемент База данных и нажмите Далее.
На экране Выбор модели базы данных выберите набор данных, а затем нажмите кнопку Далее.
На странице Выбор подключения к базе данных выполните одно из следующих действий:
Если подключение к учебной базе данных Northwind доступно в раскрывающемся списке, то выберите его.
Выберите Новое подключение для открытия диалогового окна Добавить/изменить подключение.
На странице Сохранение подключения в файле конфигурации приложения нажмите кнопку Далее.
Разверните узел Таблицы на странице Выбор объектов базы данных.
Выберите таблицу Клиенты и нажмите Готово.
Объект NorthwindDataSet добавляется в проект, и таблица Клиенты отображается в окне Источники данных.
Создание формы
Можно создать элементы управления с привязкой к данным, перетащив элементы из окна Источники данных на форму:
убедитесь, что конструктор Windows Forms имеет активное фокус, а окно источники данных открыто и закреплено.
Разверните узел Customers в окне Источники данных.
Перетащите узел Клиенты из окна Источники данных на свою форму.
На форме появляются DataGridView и полоса инструментов (BindingNavigator) для перемещения по записям. В области компонентов появляется NorthwindDataSet, CustomersTableAdapter, BindingSource и BindingNavigator.
Добавление параметризации (функции поиска) в запрос
Предложение WHERE можно добавить в исходный запрос с помощью диалогового окна Построитель условий поиска :
Непосредственно под областью конструктора формы нажмите кнопку customersTableAdapter , а затем в окне свойства выберите Добавить запрос. .
Введите филлбиЦити в области имя нового запроса в диалоговом окне Построитель условий поиска .
Добавьте WHERE City = @City в запрос в области Текст запроса.
Запрос должен выглядеть примерно следующим образом:
Источники данных доступа и OLE DB используют вопросительный знак ("?") для обозначения параметров, поэтому предложение WHERE будет выглядеть следующим образом: WHERE City = ? .
На форму добавляется FillByCityToolStrip.
Тестирование приложения
При запуске приложения открывается форма, и она готова принять параметр в качестве входных данных:
Нажмите клавишу F5 для запуска приложения.
Введите Лондон в текстовом поле Город и щелкните FillByCity.
Сетка данных заполняется клиентами, которые удовлетворяют критериям. В этом примере сетка данных отображает только клиентов, для которых в столбце Город задано значение Лондон.
Дальнейшие действия
В зависимости от требований приложения существуют несколько шагов, которые, возможно, потребуется выполнить после создания параметризованной формы. Ниже приводится перечень рекомендаций, позволяющих улучшить полученный результат.
Добавление элементов управления, отображающих связанные данные. Дополнительные сведения см. в разделе связи в наборах данных.
Изменение набора данных для добавления или удаления объектов базы данных. Дополнительные сведения см. в разделе, посвященном созданию и настройке наборов данных.
для поиска конкретных записей в наборе данных используйте FindBy метод в объекте datatable, напишите собственную инструкцию foreach для циклической обработки коллекции строк таблицы или используйте LINQ to DataSet.
Чувствительность к регистру наборов данных
В наборе данных имена таблиц и столбцов по умолчанию не учитывают регистр, то есть таблица в наборе данных с именем "Customers" также может называться "Customers". Это соответствует соглашениям об именовании во многих базах данных, включая SQL Server. в SQL Server поведение по умолчанию заключается в том, что имена элементов данных не могут отличаться только регистром.
В отличие от наборов данных, XML-документы чувствительны к регистру, поэтому имена элементов, определенных в схемах, учитывают регистр. Например, протокол схемы позволяет схеме определить таблицу с именем Customers и другую таблицу с именем Customers. Это может привести к конфликтам имен, если для создания класса набора данных используется схема, содержащая элементы, отличающиеся только регистром.
Однако чувствительность к регистру может быть фактором, определяющим способ интерпретации данных в наборе данных. Например, при фильтрации данных в таблице набора данных условия поиска могут возвращать различные результаты в зависимости от того, учитывается ли регистр при сравнении. Можно контролировать чувствительность к регистру при фильтрации, поиске и сортировке, устанавливая свойство набора данных CaseSensitive . Все таблицы в наборе данных по умолчанию наследуют значение этого свойства. (Это свойство можно переопределить для каждой отдельной таблицы, задав CaseSensitive свойство таблицы.)
Нахождение определенной строки в таблице данных
Поиск строки в типизированном наборе данных со значением первичного ключа
Чтобы указать строку, вызовите строго типизированный FindBy метод, который использует первичный ключ таблицы.
В следующем примере CustomerID столбец является первичным ключом Customers таблицы. Это означает, что созданный FindBy метод имеет значение FindByCustomerID . В примере показано, как назначить конкретное значение DataRow переменной с помощью созданного FindBy метода.
Поиск строки в нетипизированном наборе данных со значением первичного ключа
Вызовите Find метод DataRowCollection коллекции, передав первичный ключ в качестве параметра.
Поиск строк по значениям столбцов
Поиск строк на основе значений в любом столбце
Таблицы данных создаются с помощью Select метода, который возвращает массив DataRow s на основе выражения, переданного Select методу. Дополнительные сведения о создании допустимых выражений см. в разделе "синтаксис выражений" на странице со сведениями о Expression свойстве.
В следующем примере показано, как использовать Select метод объекта DataTable для размещения конкретных строк.
Доступ к связанным записям
Если таблицы в наборе данных связаны, DataRelation объект может сделать связанные записи доступными в другой таблице. Например, можно сделать доступным набор данных, содержащий Customers Orders таблицы и.
Объект можно использовать DataRelation для нахождение связанных записей путем вызова GetChildRows метода DataRow в родительской таблице. Этот метод возвращает массив связанных дочерних записей. Или можно вызвать GetParentRow метод объекта DataRow в дочерней таблице. Этот метод возвращает один объект DataRow из родительской таблицы.
На этой странице приведены примеры использования типизированных наборов данных. Дополнительные сведения о переходе по связям в нетипизированных наборах данных см. в разделе Навигация по связям DataRelation.
если вы работаете в Windows Forms приложении и используете функции привязки данных для вывода данных, форма, созданная конструктором, может предоставить достаточно функциональных возможностей для вашего приложения. Дополнительные сведения см. в разделе Привязка элементов управления к данным в Visual Studio. В частности, см. раздел связи в наборах данных.
В следующих примерах кода показано, как перемещаться по связям вверх и вниз в типизированных наборах данных. В примерах кода используются типизированные DataRow s ( NorthwindDataSet.OrdersRow ) и созданные методы финдби PrimaryKey ( FindByCustomerID ) для определения местоположения нужной строки и возврата связанных записей. Примеры компилируются и выполняются правильно, только если у вас есть:
Экземпляр набора данных NorthwindDataSet с именем и Customers таблицей.
Связь FK_Orders_Customers , связанная с двумя таблицами.
Кроме того, обе таблицы должны быть заполнены данными для любых возвращаемых записей.
Получение дочерних записей выбранной родительской записи
Вызовите GetChildRows метод определенной Customers строки данных и возвратите массив строк из Orders таблицы:
Возврат родительской записи выбранной дочерней записи
Вызовите GetParentRow метод определенной Orders строки данных и возвратите одну строку из Customers таблицы:
Описание общей потребности в поиске данных и объектов в базе данных
Достаточно часто может возникнуть ситуация, при которой нужно найти:
- объект базы данных (таблицу, представление, хранимую процедуру, функцию и т д)
- данные (значение и в какой таблице располагается)
- фрагмент кода в определениях объектов базы данных
Сначала рассмотрим как можно осуществлять поиск данных и объектов в базе данных с помощью встроенных средств самой СУБД, а затем рассмотрим как это сделать с помощью бесплатной утилиты dbForge Search.
Поиск с помощью встроенных средств самой СУБД
Определить есть ли таблица Employee в базе данных можно с помощью следующего скрипта:
Результат может быть примерно такой:
- идентификаторы объекта и схемы, где располагается объект
- название этой схемы и название этого объекта
- тип объекта и описание этого типа объекта
- даты и время создания и последней модификации объекта
Результат может быть примерно такой:
Как видно из результата, здесь подстроку “Project” содержат не только две таблицы Project и ProjectSkill, но и также некоторые первичные и внешние ключи.
Чтобы понять кому именно принадлежат данные ключи, добавим в вывод поле parent_object_id и его имя и схему, в которой он располагается следующим образом:
Результатом будет вывод таблицы с детальной информацией о родительских объектах, т е где определены первичные и внешние ключи:
В запросах используются следующие системные объекты:
Чтобы найти строковое значение по всем таблицам базы данных, можно воспользоваться следующим решением. Упростим данное решение и покажем как можно найти например значение “Ramiro” с помощью следующего скрипта:
Результат выполнения может быть таким:
Здесь выводятся имена таблиц и в каких столбцах хранится значение, содержащие подстроку “Ramiro”. А также количество найденных входов данной подстроки для найденной пары таблица-колонка.
Чтобы найти объекты, в определениях которых есть заданный фрагмент кода, можно воспользоваться следующими системными представлениями:
Здесь будет выведен идентификатор, название, описание и полное определение объекта.
Поиск с помощью бесплатной утилиты dbForge Search
Однако, более удобно поиск производить с помощью готовых хороших инструментов. Одним из таких инструментов является dbForge Search.
Для вызова этой утилиты в окне SSMS нажмите на кнопку .
Появится следующее окно поиска:
Обратите внимание на верхнюю панель (слева направо):
- можно переключать режим поиска (ищем DDL (объекты) или данные)
- непосредственно что ищем (какую подстроку)
- учитывать ли регистр, искать точное соответствие слову, искать вхождения:
В режиме поиска данных изменится только выбор типов объектов:
А именно будут доступны для выбора только таблицы, где и хранятся собственно сами данные:
Теперь как и раньше найдем все вхождения подстроки “Project” в названиях объектов:
Как видно, был выбран режим поиска по DDL-объектам, заполнено что ищем-строка “Project”, остальное все было по умолчанию.
При выделении найденного объекта внизу отображается код определения данного объекта или всего его родительского объекта.
Также можно переместить навигацию на найденный объект, щелкнув на кнопку :
Можно также сгруппировать найденные объекты по их типу:
Обратите внимание, что выводятся даже те таблицы, в которых есть поля, в именах которых содержится подстрока “Project”. Однако, напомним, что режим поиска можно менять: искать полное соответствие/частичное/учитывать регистр или нет.
Теперь найдем значение “Ramiro” по всем таблицам:
Обратите внимание, что внизу отображаются все строки, в которых содержится подстрока “Ramiro” выбранной таблицы Employee.
Также можно переместить навигацию к найденному объекту, нажав как и ранее на кнопку :
Таким образом мы можем искать нужные объекты и данные в базе данных.
Заключение
Были рассмотрены способы поиска как самих данных, так и объектов в базе данных как с помощью встроенных средств самой СУБД MS SQL Server, так и с помощью бесплатной утилиты dbForge Search.
Также от компании Devart есть и ряд других бесплатных готовых решений, полный список которых можно посмотреть здесь.
Читайте также: