Как создать запрос в visual studio
Обновлено: 03.07.2024
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».
Переходим на главную форму и добавляем кнопку «Найти» для поиска записей. Дважды щелкаем на нее и пишем код для вызова нашей новой формы:
Проверяем работоспособность приложения:
Возвращаемся на форму «Поиска». Пишем обработчик событий для кнопки «Закрыть»:
Пишем обработчик событий для кнопки «Найти»:
На главную форму добавляем кнопку «Выход» и пишем для нее код:
Итоговая форма приложения:
Приведенные ниже инструкции относятся к Visual Studio. Если вы пользуетесь другой средой разработки, создайте консольный проект со ссылкой на библиотеку System.Core.dll и директиву using для пространства имен System.Linq.
Создание проекта в Visual Studio
Запустите Visual Studio.
В строке меню выберите Файл, Создать, Проект.
Откроется диалоговое окно Новый проект .
В текстовое поле Имя введите другое имя или примите имя по умолчанию и нажмите кнопку ОК.
В обозревателе решений появится новый проект.
Обратите внимание, что проект содержит ссылку на библиотеку System.Core.dll и директиву using для пространства имен System.Linq.
Создание источника данных в памяти
Источником данных для запросов является простой список объектов Student . Каждая запись Student включает имя, фамилию и массив целых чисел, соответствующих их баллам за проведенные в классе тесты. Скопируйте этот код в проект. Обратите внимание на следующие характеристики.
Класс Student состоит из автоматически внедренных свойств.
Каждый учащийся в списке инициализируется соответствующим инициализатором объекта.
Сам список инициализируется инициализатором коллекции.
Вся эта структура данных инициализируется и создается без явных вызовов какого-либо конструктора или прямого доступа к членам. Дополнительные сведения об этих новых возможностях см. в разделах Автоматически внедренные свойства и Инициализаторы объектов и коллекций.
Добавление источника данных
Добавьте класс Student и инициализированный список учащихся в класс Program в проекте.
Добавление нового учащегося в список учащихся
- Добавьте новый объект Student в список Students и введите любое имя и результаты тестирования. Чтобы лучше изучить синтаксис инициализатора объекта, постарайтесь заполнить все данные нового учащегося.
Создание запроса
Создание простого запроса
В методе Main приложения создайте простой запрос, при выполнении которого будет возвращаться список учащихся, набравших в результате тестирования больше 90 баллов. Поскольку выбран весь объект Student , запрос имеет тип IEnumerable<Student> . Несмотря на то, что код можно также набрать напрямую, используя ключевое слово var, для демонстрации результатов применяется неявная типизация. (Дополнительные сведения о var см. в разделе Неявно типизированные локальные переменные.)
Кроме того переменная диапазона в запросе, student , служит ссылкой на каждый объект Student в источнике и предоставляет доступ к каждому объекту.
Выполнение запроса
Порядок выполнения запроса
Теперь напишите цикл foreach , вызывающий выполнение запроса. Обратите внимание на следующие моменты:
Доступ к каждому элементу в возвращаемой последовательности осуществляется с помощью переменной итерации в цикле foreach .
Эта переменная имеет тип Student , а переменная запроса — совместимый тип IEnumerable<Student> .
Добавив код, соберите и запустите приложение, чтобы отобразить результаты в окне Консоль.
Добавление другого условия фильтра
Чтобы сделать запрос более точным, можно объединить несколько логических условий в предложение where . Следующий код добавляет условие, согласно которому запрос возвращает учащихся, которые по первому тесту набрали больше 90 баллов, а по последнему — меньше 80 баллов. Предложение where должно быть аналогично приведенному ниже коду.
Дополнительные сведения см. в разделе Предложение where.
Изменение запроса
Упорядочение результатов
С результатами проще работать, если они упорядочены. Возвращаемую последовательность можно упорядочить по любому доступному полю в исходных элементах. Например, следующее предложение orderby упорядочивает результаты в алфавитном порядке от А до Z, используя фамилии учащихся. Добавьте к запросу следующее предложение orderby , указав его после оператора where и перед оператором select :
Теперь измените предложение orderby таким образом, чтобы результаты были упорядочены по баллам за первый тест в обратном порядке, от наибольшего к наименьшему.
Измените строку формата WriteLine таким образом, чтобы отобразить баллы:
Дополнительные сведения см. в разделе Предложение orderby.
Группировка результатов
Группировка представляет собой полезную возможность в выражениях запросов. Запрос с предложением group создает последовательность групп, в которой каждая группа содержит Key , и последовательность, состоящую из всех членов этой группы. Представленный ниже запрос группирует учащихся, используя в качестве ключа первую букву фамилии.
Обратите внимание на то, что тип запроса изменился. Теперь он создает последовательность групп с типом char в качестве ключа и последовательность объектов Student . Поскольку тип запроса изменился, следующий код изменяет также цикл выполнения foreach :
Запустите приложение и просмотрите результаты в окне Консоль.
Дополнительные сведения см. в разделе Предложение group.
Преобразование переменных в явно типизированные
Набирать код IEnumerables в IGroupings напрямую — далеко не самое увлекательное занятие. Написать тот же запрос и цикл foreach можно быстрее и проще, воспользовавшись переменной var . Ключевое слово var не приводит к изменению типов объектов, оно просто сообщает компилятору о том, что он должен вывести типы логически. Измените тип studentQuery и переменную итерации group на var и выполните запрос заново. Обратите внимание на то, что во внутреннем цикле foreach переменная итерации по-прежнему типизируется как Student , а запрос работает так же, как раньше. Измените переменную итерации student на var и выполните запрос заново. Результаты будут точно такими же.
Дополнительные сведения о переменной var см. в разделе Неявно типизированные локальные переменные.
Упорядочение групп по значению ключа
Выполняя предыдущий запрос, вы могли заметить, что группы отображаются не в алфавитном порядке. Для того чтобы это изменить, необходимо указать предложение orderby после предложения group . Но, чтобы использовать предложение orderby , нужен идентификатор, служащий в качестве ссылки на группы, создаваемые предложением group . Укажите идентификатор с помощью ключевого слова into , как показано ниже:
После выполнения этого запроса группы будут отсортированы в алфавитном порядке.
Введение идентификаторов с помощью предложения let
Ключевое слово let позволяет ввести идентификатор для любого результата в выражении запроса. Этот идентификатор может применяться для удобства, как в следующем примере, или повышать производительность, сохраняя результаты выражения, чтобы не вычислять их повторно.
Дополнительные сведения см. в разделе Предложение let.
Использование синтаксиса метода в выражении запроса
Как описано в разделе Синтаксис запросов и синтаксис методов в LINQ, некоторые операции запросов можно выразить, только используя синтаксис метода. Представленный ниже код вычисляет общий балл для каждого объекта Student в исходной последовательности, а затем применяет метод Average() к результатам запроса, чтобы рассчитать средний балл класса.
Преобразование или проецирование в предложение select
Запрос очень часто выдает последовательность, элементы которой отличаются от элементов в исходной последовательности. Удалите или закомментируйте предыдущий запрос и цикл выполнения и замените его на представленный ниже код. Обратите внимание на то, что запрос возвращает последовательность строк (не Students ), и этот факт отражается в цикле foreach .
Код, представленный выше в этом пошаговом руководстве, показывает, что среднее количество баллов по классу составляет около 334. Для создания последовательности Students , сумма баллов в которой будет выше, чем средний показатель по классу, с указанием Student ID можно вставить в оператор select анонимный тип:
Следующие шаги
Пример создания запроса ( Query ) в базе данных MS SQL Server . База данных размещена в локальном файле *.mdf
Содержание
- Условие задачи
- Выполнение (пошаговая инструкция)
- 1. Загрузить Microsoft Visual Studio
- 2. Подключить базу данных Education.mdf к перечню баз данных утилиты Server Explorer
- 3. Добавление нового запроса. Команда «New Query»
- 4. Добавление вычисляемого поля Average
- 5. Запуск запроса на выполнение. Команда «Execute SQL»
Поиск на других ресурсах:
Условие задачи
Задана база данных, которая размещается в файле Education.mdf . База данных содержит две связанные между собою таблицы Student и Session .
Таблицы связаны между собою за полем ID_Book .
Используя средства Microsoft Visual Studio создать запрос с именем Query1 , который будет иметь следующую структуру:
Название поля Таблица Num_Book Student Name Student Mathematics Session Informatics Session Philosophy Session Average Вычислительное поле Выполнение (пошаговая инструкция)
1. Загрузить Microsoft Visual Studio
2. Подключить базу данных Education.mdf к перечню баз данных утилиты Server Explorer
Чтобы не тратить время на разработку и связывание таблиц базы данных Education.mdf , архив ранее подготовленной базы данных можно загрузить здесь . После загрузки и сохранения в некоторой папке, базу данных нужно разархивировать и подключить к перечню баз данных утилиты Server Explorer .
Подключение базы данных реализуется одним из нескольких стандартных способов:
В результате, откроется окно мастера, в котором с помощью нескольких шагов (окон) нужно настроить подключение базы данных.
Рис. 1. Способы добавления/подключения базы данных
Подробное описание того, как осуществляется подключение базы данных типа Microsoft SQL Server в Microsoft Visual Studio , приведено в теме:
После подключения, окно утилиты Server Explorer будет выглядеть как показано на рисунке 2.
Рис. 2. Утилита Server Explorer с подключенной базой данных Education.mdf
К базе данных можно создавать запросы. В нашем случае нужно создать запрос в соответствии с условием задачи.
Рис. 3. Команда New Query
Рис. 4. Выбор таблиц, которые будут использоваться в запросе
Для нашего случая нужно выбрать обе таблицы.
В результате окно Microsoft Visual Studio будет выглядеть, как показано на рисунке 5.
Рис. 5. Окно MS Visual Studio после создания запроса
В таблицах нужно выделить поля, которые будут использоваться в запросе. Порядок выбора полей должен соответствовать отображению их в запросе в соответствии с условием задачи. Это означает, что сначала выбираются поля таблицы Student ( NumBook , Name ), а потом выбираются поля таблицы Session ( Mathematics , Informatics , Philosophy ).
Для нашего случая выбор полей изображен на рисунке 6.
Рис. 6. Выбор полей для запроса
Как видно из рисунка 6, в нижней части окна отображается запрос на языке SQL , сформированный системой
4. Добавление вычисляемого поля Average
Чтобы создать вычисляемое поле Average , нужно в окне, где отображается SQL -запрос изменить текст этого запроса. Например:
Добавляется вычислительное поле Average , которое есть средним арифметическим (рисунок 7).
Рис. 7. Добавление вычисляемого поля Average
В нижней части окна на рисунке 8 изображен результат выполнения запроса.
Основной инструмент для разработки операторов SQL — это конструктор Query/View Designer, который является графическим инструментом, позволяющим вам создавать запросы при помощи простой работы мышью. После создания запроса этот инструмент позволяет вам просмотреть полученные в результате выполнения запроса результаты, а также и работать с ними.
Теперь вы готовы приступить к работе с этим инструментом.
Для создания нового запроса выборки по таблице нужно просто выделить базу данных в Server Explorer, а затем в меню Data выбрать пункт New Query. После этого вы получаете список таблиц, представлений, функций и/или синонимов, которые можно использовать в качестве целей запроса (рис. 18.13).
После выбора объектов для запроса откроется конструктор запросов Query Designer. Как показано на рис. 18.14, в конструкторе имеется четыре разных панели:
□ панель критериев позволяет вам выбрать: столбцы данных для включения в оператор выборки; сортировку; а также имена алиасов;
□ панель диаграммы аналогична диаграмме в конструкторе Database Diagram Designer; она графически изображает связи между объектами базы данных. Это сводит создание соединений к использованию имеющихся связей либо созданию новых в этом же инструменте;
□ после выполнения запроса в панели результатов содержатся данные результата. Обратите внимание, что эта панель оборудована элементами управления навигацией (для листания больших результирующих наборов данных);
□ панель SQL содержит реальный синтаксис SQL, используемый для реализации запроса. Вы можете модифицировать оператор при помощи ручного ввода в этой панели, либо использовать конструктор и позволить ему написать для вас код SQL в соответствии с введенными вами в панелях диаграммы и критерия данными.
Каждая из этих панелей может быть показана или скрыта. Щелкните правой кнопкой мыши в любом месте конструктора и в меню Рапе выберите видимые панели.
Тонкая настройка оператора SQL
При составлении оператора выборки вы можете указать, какие столбцы каких таблиц вы хотите получить (для этого надо поставить галочку около столбца в панели диаграммы). Панель критерия вы используете для указания: порядка сортировки, алиасов возвращаемых столбцов, а также для настройки фильтра результирующего набора данных. По мере того как вы выбираете эти опции, конструктор превращает их в код SQL, который виден в панели SQL.
части экрана CodePlex. База данных AdventureWorks используется также и в системе интерактивной помощи SQL Server 2005 Books Online.
На рис. 18.15 показан законченный запрос "Employee", его результаты видны в нижней панели.
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
Проектирование базы данных MS Access
Создадим в Microsoft Access базу данных Workers (рабочие) с одной таблицей Worker (рабочий).
Таблица содержит следующие столбцы:
TextBox, ListBox и пять кнопок Button.
На макете формы в Visual Studio выполним двойные щелчки левой кнопкой мыши на всех кнопках, создав тем самым обработчики событий нажатия для каждой кнопки.
private void selectButton1_Click ( object sender , EventArgs e )Также в окне свойств формы с помощью двойного щелчка мыши создадим обработчик события FormClosing, выполняющегося при закрытии формы.
private void Form1_FormClosing ( object sender , FormClosingEventArgs e )Файл с БД поместим в каталог \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 запрос изменит все строки в таблице.
Читайте также: