Visual studio поиск в базе данных
Очень часто разработчики и администраторы БД сталкиваются с задачей поиска в базе данных всех упоминаний какого-либо объекта, столбца, переменной или поиск всех таблиц, где встречается искомое значение. Если вам приходилось решать подобную проблему, то вы знаете, что это ни самая тривиальная задача и Ctrl+F здесь не поможет.
Готового решения нет ни в SQL Server Management Studio ни в Visual Studio, вот несколько сценариев, которые вы можете использовать:
Поиск данных в таблицах и представлениях
Есть много реализаций на T-SQL поиска данных по всем таблицам с просмотром всех столбцов и это не самая оптимальная реализация, так как везде используется перебор в курсоре системных представлений.
У этого решения есть много недостатков:
- Использование курсоров, а это, как правило неэффективный код
- Сложный запрос, который медленно работает даже на небольших базах данных
- Поиск работает только по текстовым данным, поэтому для поиска, например, даты потребуется доработка
Поиск объектов
Поиск объектов в БД по имени или их упоминание в других объектах немного проще, чем поиск определённого текста. Есть так же несколько разных сценариев поиска, но все их объединяет одно: обращение к системным объектам.
Во всех следующих сценариях осуществляется поиск переменной @StartProductID в хранимых процедурах. Но скрипты можно использовать и для поиска в других объектах – в триггерах, функциях, столбцах и т.д.
INFORMATION_SCHEMA.ROUTINES
Системное представление INFORMATION_SCHEMA.ROUTINES позволяет найти любой параметр, встречающийся в процедурах или функциях. Колонка ROUTINE_DEFINITION содержит полный текст объекта, который был указан при его создании.
Результат работы запроса:
Не используйте представления INFORMATION_SCHEMA, чтобы определить схему объекта. Единственный надежный способ найти схему объекта — выполнить запрос к представлению каталога sys.objects.
Представление sys.syscomments
Содержит записи для всех представлений, правил, значений по умолчанию, триггеров, ограничений CHECK и DEFAULT, а также для всех хранимых процедур в базе данных. Столбец text содержит инструкции исходных определений SQL.
Этот метод не желательно использовать, так как в будущих версиях SQL Server представление sys.syscomments будет удалено.
Представление sys.sql_modules
Содержит по одной строке для каждого объекта, являющегося модулем, определенным на языке SQL в SQL Server.
Результат такой же, как в предыдущем способе:
Другие представления информационной схемы
Запрос к представлениям sys.syscomments, sys.schemas и sys.objects. Представление sys.schemas содержит информацию обо всех схемах внутри базы данных. В представление sys.objects содержится информация обо всех объектах базы данных. Обратите внимание, что для поиска информации о триггерах необходимо просматривать отдельное представление sys.triggers.
Основным недостатком данных методов поиска является то, что для поиска каждого нового типа объектов необходимо вносить в скрипты изменения. Чтобы сделать это вы должны хорошо понимать внутреннюю организацию и структуру системных объектов SQL Server. Кроме того, нужно позаботиться об обработке различных ошибок и исключений, например, связанных с поиском строк, содержащих экранирующие символы.
Если вы не являетесь опытным разработчиком, не знакомы с внутренним устройством хранения DDL информации объектов БД или предпочитаете использовать проверенное и безошибочное решение, то начните использовать ApexSQL Search.
ApexSQL Search – это надстройка (ADD-IN) для SSMS и Visual Studio, которая позволяет искать любой текст в объектах базы данных (в том числе имена объектов), данные, хранящиеся в таблицах и представлениях (даже если они зашифрованы), осуществлять повторные поиски по истории в один клик.
Для поиска данных в таблицах и представлениях:
-
В меню SQL Server Management Studio или Visual Studio найдите ApexSQL Search
Выберите вариант Database text search…:
После нажатия кнопки Find now, вы получите сводную таблицу со списком таблиц и представлений, которые содержат искомое значение:
Для поиска объектов:
-
В меню SQL Server Management Studio или Visual Studio найдите ApexSQL Search
В таблице будет полный список объектов, которые содержат искомое значение.
SQL Server Management Studio и Visual Studio не имеют встроенной возможности поиска объектов и данных в БД. Запросы, которые решают эту задачу неэффективны, медленные в работе и требуют глубоких знаний системных объектов SQL Server. Но зато с этой задачей прекрасно справляется ApexSQL Search
Есть база данных Acess подключенная через DataGridView.
Можно ли реализовать поиск без sql?
Тоесть я ввожу значения в textbox,нажимаю кнопку поиск,и он мне подсвечивает строку,или эллемент столбца в котором находится найденный эллемент.
Но почему-то не работает =/
Добавлено через 35 минут
Если кто может,создайте проект с поиском по базе данных и слейте сюда,я уже как-нибудь разберусь
Помощь в написании контрольных, курсовых и дипломных работ здесь
Ввод массивов через множество textBox, подсчёт суммы, и вывод через listBox. Ошибка при вводе через textBox
Создал я кучу текст боксов, там происходит ввод каждого элемента массива. И вывод через листбокс .
Поиск в ListBox через TextBox
Всем привет! Как сделать так чтобы при запуске словаря можно было выбором из ListBox сразу.
Поиск по DataGridView через TextBox
Доброго времени суток. Имеется форма на форме dataGridView и textBox. Как осуществить поиск по.
Поиск в ListBox через TextBox
Всем привет! Есть такая задача, у нас есть в Форме: 4 ListBox с данными, 1 Textbox, Button.
Могу предложить пока такой вариант:
А если тебе нужно отфильтровать базу данных по похожему значению (скажем если у тебя в БД есть "Пьехов" и " Пьехов"), то нужно использовать следующий код:
Добавлено через 26 минут
Во, пока читал форум наткнулся на похожий вопрос. И наткнулся на возможное решение. Посмотри тут - всего 2 поста ^_^
Решение
Можно сделать так:1. Сделать запрос с поиском id нужных записей
2. Надо как-нибудь сохранить наши ID , например в списке List<int> _listID = new List<int>;
(это один из вариантов решения твоей задачи, можно работать напрямую с запросом)
3. Пробегаемся по DataGridView (понятно, что в датаГриде нужен столбец с ID'никами) и сравнивая с ID по запросу и при совпадении закрашиваем DataGridViewRow:
Довольно распространенным сценарием приложения является отображение выбранных данных на форме. Например, вам может потребоваться отобразить заказы для определенного клиента или сведения о конкретном заказе. В таком сценарии пользователь вводит в форму информацию, после чего выполняется запрос, включающий в себя эти введенные пользователем данные в качестве параметра; таким образом, данные выбираются на основе параметризированного запроса. Запрос возвращает только те данные, которые удовлетворяют введенным пользователем условиям. Это пошаговое руководство показывает, как создать запрос, возвращающий клиентов из определенного города, и изменить пользовательский интерфейс, чтобы пользователи могли ввести название города и нажать кнопку для выполнения запроса.
Использование параметризованных запросов помогает сделать приложение эффективным, так как позволяет базе данных заниматься своей непосредственной задачей — быстрой фильтрацией записей. И наоборот, если запросить всю таблицу базы данных, передать ее по сети и использовать логику приложения для поиска записей, ваше приложение станет медленным и неэффективным.
Можно добавить параметризованные запросы в любой 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.
Сетка данных заполняется клиентами, которые удовлетворяют критериям. В этом примере сетка данных отображает только клиентов, для которых в столбце Город задано значение Лондон.
Дальнейшие действия
В зависимости от требований приложения существуют несколько шагов, которые, возможно, потребуется выполнить после создания параметризованной формы. Ниже приводится перечень рекомендаций, позволяющих улучшить полученный результат.
Добавление элементов управления, отображающих связанные данные. Дополнительные сведения см. в разделе связи в наборах данных.
Изменение набора данных для добавления или удаления объектов базы данных. Дополнительные сведения см. в разделе, посвященном созданию и настройке наборов данных.
1. Создание базы данных
В качестве СУБД выберем программу Microsoft Access. Но вы можете использовать и другую базу данных.
Создаем базу данных в Microsoft Access и называем её «test». В этой базе данных создаем таблицу «contacts»:
Заполните базу данных данными:
Базу данных вы можете и другую создать и данные в ней можете другие добавить т.к. это не принципиально, но мы будем работать с данной таблицей.
2. Создание проекта
В Visual Studio создаём проект:
Открываем список «Выберите источник данных» и нажимаем на ссылку «Добавить источник данных проекта»:
Откроется «Мастер настройки источника данных». В качестве источника выбираем «База данных» и идем далее:
В следующем окне идем далее:
В окне «Выбор подключения к базе данных» нажимаем на «Создать подключение»:
В следующем окне «Добавить подключение» выбираем в «Поставщик OLE DB» Microsoft Office 16.0 Access Database. В «Имя сервера или файла» вписываем путь к нашему файлу базы данных Access (который создали в первом пункте). Проверяем подключение и жмем «ОК»:
Update 2021: Visual Studio 2019 требует файл Access старого формата (.mdb – это старый формат баз данных Access 2002-2003):
В следующем окне идем далее:
Выйдет окно для переноса файла базы данных в Ваш проект нажимаем «Да»:
В следующем окне ничего не меняем и идем далее:
В следующем окне выбираем нашу таблицу «contacts» и жмем «Готово»:
После всех манипуляций наша форма должна быть примерно такой:
Если запустить наш проект, то можно увидать данные из нашей базы данных:
Поменяйте ширину всех столбцов на «150» чтобы столбцы вместились во все окно:
Вот так без единой строчки кода мы вывели данные из нашей таблицы на нужную нам форму. Переходим к 3 пункту.
3. Сохранение данных
Базу данных мы видим, но редактировать её невозможно и именно поэтому нам нужна кнопка «Сохранить». Добавляем на форму кнопку и в свойствах меняем имя на «SaveButton». После добавления кнопки нажимаем на нее два раза и пишем код:
После добавления кода запустите свое приложение и попробуйте изменить любую запись и сохранить.
4. Изменение заголовков столбцов таблицы
Изменим текст столбцов и скроем столбец «img»:
Полезные свойства для изменения столбцов:
- HeaderText – задает название столбца.
- Visible – скрывает заголовок или наоборот.
- Width – ширина столбца.
- Resizable – можно ли изменять ширину столбца.
После того как скроете заголовок «img» измените ширину всех остальных заголовков:
5. Защита от случайного удаления
Чтобы пользователь случайно не удалил запись в нашей базе данных нужно сделать так чтобы перед удалением приложение спрашивало об удалении записи.
Для этого перейдем к компоненту DataGridView, откроем список событий и установим обработчик для события UserDeletingRow. Нажмите два раза на пустую строчку возле события и перейдете к коду. Вписываем код:
После этого проверим работоспособность данного кода. Запустим приложение и попробуем удалить запись. Должно быть вот так:
6. Добавление данных
Добавляем новую форму в проект и называем ее «AddForm»:
Изменяем заголовок формы и добавляем на форму компоненты:
- 1 groupBox c текстом «Добавление записи»;
- 4 TextBox и меняем свойство «Name» на (tbName, tbPhone, tbMail, tbPhoto);
- 4 label и меняем текст на (Имя, Телефон, E-mail, Фото);
- 1 Button и меняем свойство «Name» на «AddBtn» (Добавить);
- 1 Button и меняем свойство «Name» на «CloseBtn» (Закрыть).
Переходим на главную форму и добавляем кнопку «Добавить» для добавления новой записи. Дважды щелкаем на нее и пишем код для вызова нашей новой формы:
Проверьте работоспособность приложения:
Возвращаемся на форму «Добавления записи». Пишем обработчик событий для кнопки «CloseBtn»:
Чтобы обработчик событий на кнопке «AddBtn» работал как надо нужно выполнить несколько действий. Зайти в «Form1.Designer.cs» и изменить модификаторы доступа на «public» нижеуказанных файлов:
- System.Windows.Forms.DataGridView dataGridView1;
- testDataSet testDataSet;
- System.Windows.Forms.BindingSource contactsBindingSource;
- testDataSetTableAdapters.contactsTableAdapter contactsTableAdapter;
Это нужно для того чтобы наша база данных была доступна для разных с ней манипуляций во всех создаваемых нами формах. Обработчик событий для кнопки «AddBtn»:
Проверьте работу приложения. Добавьте несколько новых записей через новую форму добавления записей.
7. Поиск данных
Реализуем самый простой поиск. Данный поиск используется в небольших приложениях. Создаем новую форму с именем «SearchForm» и добавляем на форму компоненты:
- 1 GroupBox (Поиск);
- 1 label;
- 2 button (Найти и Закрыть);
- 1 TextBox и меняем в свойствах «Name» на «tbStr».
Переходим на главную форму и добавляем кнопку «Найти» для поиска записей. Дважды щелкаем на нее и пишем код для вызова нашей новой формы:
Проверяем работоспособность приложения:
Возвращаемся на форму «Поиска». Пишем обработчик событий для кнопки «Закрыть»:
Пишем обработчик событий для кнопки «Найти»:
На главную форму добавляем кнопку «Выход» и пишем для нее код:
Итоговая форма приложения:
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
Проектирование базы данных MS Access
Создадим в Microsoft Access базу данных Workers (рабочие) с одной таблицей Worker (рабочий).
Таблица содержит следующие столбцы:
TextBox, ListBox и пять кнопок Button.
На макете формы в Visual Studio выполним двойные щелчки левой кнопкой мыши на всех кнопках, создав тем самым обработчики событий нажатия для каждой кнопки.
private void selectButton1_Click ( object sender , EventArgs e )Также в окне свойств формы с помощью двойного щелчка мыши создадим обработчик события FormClosing, выполняющегося при закрытии формы.
Файл с БД поместим в каталог \bin\Debug в папке с проектом.
public static string connectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Workers.mdb;" ; //public static string connectString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Workers.mdb;";Далее добавим поле класса типа OleDbConnection. Экземпляр данного класса понадобится для установления соединения с базой данных MS Access.
// поле - ссылка на экземпляр класса OleDbConnection для соединения с БДВ конструкторе класса создадим экземпляр OleDbConnection и установим соединение с БД. Т.е. при запуске программы будет устанавливаться соединение с Access.
В обработчике события закрытия формы добавим код, закрывающий соединение с базой данных. Таким образом при выходе из программы соединение с БД будет закрываться.
private void Form1_FormClosing ( object sender , FormClosingEventArgs e )Напишем в обработчик события нажатия кнопки SELECT1 код, выполняющий запрос выборки данных одного столбца одной строки. Вывод данных производится в TextBox.
private void selectButton1_Click ( object sender , EventArgs e ) string query = "SELECT w_name FROM Worker WHERE w_id = 1" ; // создаем объект OleDbCommand для выполнения запроса к БД MS Access OleDbCommand command = new OleDbCommand ( query , myConnection ) ; textBox1 . Text = command . ExecuteScalar ( ) . ToString ( ) ;При нажатии кнопки SELECT2 будет выполняться запрос на получение многострочных данных из нескольких столбцов (по сути таблицы). Данные выводятся в ListBox.
private void selectButton2_Click ( object sender , EventArgs e ) string query = "SELECT w_name, w_position, w_salary FROM Worker ORDER BY w_salary" ; // создаем объект OleDbCommand для выполнения запроса к БД MS Access OleDbCommand command = new OleDbCommand ( query , myConnection ) ; // получаем объект OleDbDataReader для чтения табличного результата запроса SELECT listBox1 . Items . Add ( reader [ 0 ] . ToString ( ) + " " + reader [ 1 ] . ToString ( ) + " " + reader [ 2 ] . ToString ( ) + " " ) ; private void insertButton_Click ( object sender , EventArgs e ) string query = "INSERT INTO Worker (w_name, w_position, w_salary) VALUES ('Михаил', 'Водитель', 20000)" ; // создаем объект OleDbCommand для выполнения запроса к БД MS Access OleDbCommand command = new OleDbCommand ( query , myConnection ) ;Запрос обновления данных UPDATE:
private void updateButton_Click ( object sender , EventArgs e ) string query = "UPDATE Worker SET w_salary = 123456 WHERE w_id = 3" ; // создаем объект OleDbCommand для выполнения запроса к БД MS Access OleDbCommand command = new OleDbCommand ( query , myConnection ) ; private void deleteButton_Click ( object sender , EventArgs e ) // создаем объект OleDbCommand для выполнения запроса к БД MS Access OleDbCommand command = new OleDbCommand ( query , myConnection ) ;private void btn_cl_del_Click(object sender, EventArgs e)
Проблема в том, что различается тип данных. Хоть в текстбокс и вводятся цифры, система воспринимает их как текст и поэтому не может произвести поиск по БД, чтобы выполнить запрос
Скажите, как с этим бороться?
Здравствуйте! Чтобы получить значение из текстового поля, используйте: textbox.Text
Здравствуйте! а что делать в случае если у меня 4 связанных таблицы? как сделать так чтобы с помощью запросов все они обрабатывались и были задействованы
Здравствуйте! Нужно использовать запросы JOIN.
Здравствуйте! Спасибо большое за видео, но есть один вопросик. Допустим есть таблица с полями Name (длинный текст) и Id ( короткий текст). Одну линейку из бд мы удаляем с помощью DELETE. У нас пускай были айди 1 2 3 4 5. Удалили третий. Теперь у нас 1 2 4 5. Как их обновить. Пробовал через UPDATE, но он разом проходит по всем линейкам БД. Таким образом получаем 1 1 1 1. Как решить эту проблему?
Здравствуйте! Когда выполняете запрос UPDATE нужно с помощью ключевого слова where указать к какой строке относится запрос (UPDATE TableName SET where А без where запрос изменит все строки в таблице.
Читайте также: