Как создать запрос в 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 в проекте.

Добавление нового учащегося в список учащихся

  1. Добавьте новый объект 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 .

    Подключение базы данных реализуется одним из нескольких стандартных способов:

    В результате, откроется окно мастера, в котором с помощью нескольких шагов (окон) нужно настроить подключение базы данных.

    Visual Studio подключение базы данных команда

    Рис. 1. Способы добавления/подключения базы данных

    Подробное описание того, как осуществляется подключение базы данных типа Microsoft SQL Server в Microsoft Visual Studio , приведено в теме:

    После подключения, окно утилиты Server Explorer будет выглядеть как показано на рисунке 2.

    Visual Studio Server Explorer рисунок

    Рис. 2. Утилита Server Explorer с подключенной базой данных Education.mdf

    К базе данных можно создавать запросы. В нашем случае нужно создать запрос в соответствии с условием задачи.

    SQL Server команда "New Query"

    Рис. 3. Команда New Query

    SQL Server таблица выбор

    Рис. 4. Выбор таблиц, которые будут использоваться в запросе

    Для нашего случая нужно выбрать обе таблицы.

    В результате окно Microsoft Visual Studio будет выглядеть, как показано на рисунке 5.

    Visual Studio запрос рисунок

    Рис. 5. Окно MS Visual Studio после создания запроса

    В таблицах нужно выделить поля, которые будут использоваться в запросе. Порядок выбора полей должен соответствовать отображению их в запросе в соответствии с условием задачи. Это означает, что сначала выбираются поля таблицы Student ( NumBook , Name ), а потом выбираются поля таблицы Session ( Mathematics , Informatics , Philosophy ).

    Для нашего случая выбор полей изображен на рисунке 6.

    Visual Studio поле запрос

    Рис. 6. Выбор полей для запроса

    Как видно из рисунка 6, в нижней части окна отображается запрос на языке SQL , сформированный системой

    4. Добавление вычисляемого поля Average

    Чтобы создать вычисляемое поле Average , нужно в окне, где отображается SQL -запрос изменить текст этого запроса. Например:

    Добавляется вычислительное поле Average , которое есть средним арифметическим (рисунок 7).

    Visual Studio выбор поле запрос

    Рис. 7. Добавление вычисляемого поля Average

    В нижней части окна на рисунке 8 изображен результат выполнения запроса.

    SQL Server команда "Execute SQL"

    Основной инструмент для разработки операторов SQL — это конструктор Query/View De­signer, который является графическим инструментом, позволяющим вам создавать запросы при помощи простой работы мышью. После создания запроса этот инструмент позволяет вам просмотреть полученные в результате выполнения запроса результаты, а также и рабо­тать с ними.

    Теперь вы готовы приступить к работе с этим инструментом.

    Для создания нового запроса выборки по таблице нужно просто выделить базу данных в Server Explorer, а затем в меню Data выбрать пункт New Query. После этого вы получаете список таблиц, представлений, функций и/или синонимов, которые можно использовать в качестве целей запроса (рис. 18.13).

    После выбора объектов для запроса откроется конструктор запросов Query Designer. Как показано на рис. 18.14, в конструкторе имеется четыре разных панели:

    □ панель критериев позволяет вам выбрать: столбцы данных для включения в оператор выборки; сортировку; а также имена алиасов;

    Описание: image476
    Описание: image477

    □ панель диаграммы аналогична диаграмме в конструкторе Database Diagram Designer; она графически изображает связи между объектами базы данных. Это сводит создание соединений к использованию имеющихся связей либо созданию новых в этом же инст­рументе;

    □ после выполнения запроса в панели результатов содержатся данные результата. Обра­тите внимание, что эта панель оборудована элементами управления навигацией (для листания больших результирующих наборов данных);

    □ панель SQL содержит реальный синтаксис SQL, используемый для реализации запроса. Вы можете модифицировать оператор при помощи ручного ввода в этой панели, либо использовать конструктор и позволить ему написать для вас код SQL в соответствии с введенными вами в панелях диаграммы и критерия данными.

    Каждая из этих панелей может быть показана или скрыта. Щелкните правой кнопкой мыши в любом месте конструктора и в меню Рапе выберите видимые панели.

    Тонкая настройка оператора SQL

    Описание: image478

    При составлении оператора выборки вы можете указать, какие столбцы каких таблиц вы хотите получить (для этого надо поставить галочку около столбца в панели диаграммы). Панель критерия вы используете для указания: порядка сортировки, алиасов возвращае­мых столбцов, а также для настройки фильтра результирующего набора данных. По мере того как вы выбираете эти опции, конструктор превращает их в код 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, выполняющегося при закрытии формы.

    Обработчик события закрытия формы - в нем будем закрывать соединение с БД Access

    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 запрос изменит все строки в таблице.

    Читайте также: