Как посмотреть бд в visual studio

Обновлено: 07.07.2024

Цель урока: Изучить основные принципы работы с базой данных. Краткое описание реляционной модели баз данных. Работа с базой данных (создание таблиц, связей в 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
Email 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 в контроллере:

Первый шаг при разработке программы для работы с базами данных – это создание самой базы. Выберите в меню Вид \ Другие окна \ Обозреватель серверов, в появившемся окне нажмите правой кнопкой мыши по «Подключения данных» и выберите «Создать новую базу данных SQL Server».

В качестве имени сервера введите (LocalDB)\v11.0.

MSSQL поддерживает 2 типа авторизации: по имени пользователя Windows, или по своему собственному списку пользователей. При использовании авторизации SQL Server Authentication необходимо ввести имя пользователя и пароль. Выберите «Использовать аутентификацию Windows» и укажите имя для новой базы данных.

Если не возникнет ошибок подключения или авторизации, то будет создана новая БД, и в окне Обозреватель серверов в разделе Подключения данных появится новая ветка с именем базы. Если ее раскрыть, то появятся записи для работы с этой базой.

Для примера создадим БД мобильных телефонов. Для хранения данных в базе используются таблицы, поэтому начнем с них. Разработка структуры будущей базы является важным этапом при создании приложений работы с данными, так четкая структура и наличие логических связей между таблицами упрощает приложение, и наоборот – лишние поля в таблицах, дублирование полей, недостаточные связи и т.п. могут существенно осложнить работу.

Сначала определим, какую информацию мы будем хранить о телефонах. В нашем случае, например, для упрощения будем учитывать 6 характеристик: производитель, модель, год выпуска, цвет, вес, изображение телефона. Если просто создать таблицу с заданными полями, то мы сможем хранить всю интересующую информацию, но это будет не оптимальное решение.

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

Для решения проблемы лучше будет хранить имена производителей в отдельной таблице, а в таблице моделей просто указывать его номер. Тогда для смены названия фирмы просто понадобится сменить имя в таблице производителей у одной записи, и все, ее номер не поменяется, и таблицу моделей редактировать не придется. К тому же когда нам понадобится вывести все модели телефонов заданной фирмы, поиск будет осуществляться по номеру, т.е. сравнением целых чисел, что намного быстрее, нежели сравнение строк в первом случае.

Еще одним приемом при проектировании БД, позволяющим упростить и ускорить работу с базой, является наличие уникального номера-идентификатора в таблицах (ключа), однозначно определяющего строку таблицы. Гораздо удобнее и быстрее обращаться к записи в таблице в виде «номер 231», чем «фирма Nokia, модель …, год …, цвет …, вес …, …».

Начнем с создания таблицы производителей. Если раскрыть ветку с созданной базой данных в дереве в окне Обозреватель серверов, то появятся записи Таблицы, Представления, Типы и другие объекты базы. Нажмите правой кнопкой по Таблицы и выберите Добавить новую таблицу. Появится окно ввода имени полей таблицы, их типов и «Допустимы значения Nulls» (может ли поле не содержать значения, т.е. быть пустым). Создайте следующие поля: ID - тип int и Name - тип nvarchar(20).

Поле ID – уникальный числовой идентификатор типа int. Чтобы сервер MSSQL сам назначал номера при добавлении новых записей в таблицу, в свойствах поля в списке выберите Спецификация идентификатора и установите значения True для (Идентификатор).

Поле Name – название фирмы, nvarchar(20) означает строка длиной до 20 символов.

Измените имя таблицы на Firms и нажмите кнопку «Обновить».

Теперь создайте еще одну таблицу Models для моделей телефонов с полями:

Имя поля Тип
ID int
ID_Firm int
model nvarchar(20)
year int
color nvarchar(15)
weight int
photo image

Названия полей говорят сами за себя, поле ID_Firm будет содержать номер фирмы, т.е. значения из поля ID в таблице Firms.

Вы всегда можете поменять структуру таблицы, нажав правой кнопкой по ее имени в окне Обозреватель серверов и выбрав Открыть определение таблицы.

Вызовите таким образом на редактирование таблицу Firms, нажмите правой кнопкой на поле Индексы, и в появившемся меню выберите «Добавить новый индекс». В свойствах созданного индекса установите параметр Уникальный в значение True. В параметре Столбцы выберите поле ID. Нажмите правой кнопкой мыши на поле ID таблицы, и в появившемся меню выберите «Задать первичный ключ». Т.е. поле ID теперь является уникальным ключом (идентификатором) для записей в таблице. Обновите базу данных.

Теперь отредактируем таблицу Models, по аналогии нажмите правой кнопкой на пункте «Внешние ключи», и в появившемся меню выберите «Добавить новый внешний ключ». Внешние ключи позволяют задавать связи между таблицами, в нашем случае надо сообщить серверу, что поле ID_Firm связано с полем ID из таблицы Firms.

Обновите базу данных.

Теперь можно занести данные в таблицу. Нажмите правой кнопкой по имени таблицы, выберите меню Показать таблицу данных.

Для таблицы Firms:

Для таблицы Models:

Теперь, когда БД готова, можно приступать к написанию программы. Создайте проект Windows Forms, поместите на форму компонент SplitContainer. На его левую панель поместите DataGridView (поменяйте имя на dgvFirms, выравнивание Dock на Fill). На правую панель поместите компонент Panel c выравниваем по низу Dock = Bottom, на эту панель поместите 3 кнопки «Добавить», «Редактировать», «Удалить» с именами btnModelAdd, btnModelEdit и btnModelDel.

На оставшееся место в правой панели SplitContainer добавьте еще один компонент DataGridView с именем dgvModels и выравниваем Fill:

Чтобы появились заголовки в компонентах DataGridView (далее будем называть просто грид) как показано на рисунке, нажмите сначала правой кнопкой мыши на левом гриде, и выберите Правка столбцов:

Данный грид будет содержать имена фирм, поэтому добавьте в него 2 столбца с именами (св-во Name) colFirmID и colFirmName. Header text это то, что будет отображаться в заголовке столбца в самом гриде, поэтому желательно занести соответствующие русские названия. Столбец colFirmID будет хранить идентификатор записи и отображаться не будет, поэтому установите у него свойство Visible в false.

Теперь создадим столбцы для правого грида, который будет содержать модели телефонов:

Имена для столбцов соответственно: colModelID, colModelName, colModelYear, colModelColor, colModelWeight, colModelPhoto. Последний столбец будет отображать фото телефона, поэтому поменяйте его тип на DataGridViewImageColumn. Первый столбец будет содержать идентификатор ID моделей, поэтому сделайте его невидимым Visible = false.

Установите у обоих гридов свойства AllowUserToAddRows = false, AllowUserTDeleteRows = false и ReadOnly = true, что отключит непосредственное редактирование в гридах (мы будем пользовать отдельные кнопки). SelectionMode = FullRowSelect и ColumnHeadersHeightSizeMode = AutoSize, AutoSizeColumnsMode = Fill чтобы выбирать курсором строки целиком и растягивать столбцы по ширине грида соответственно.

Отдельно у правого грида dgvModels установите AutoSizeRowsMode = AllCellsExceptHeaders, чтобы высота строк в нем растягивалась по высоте изображения телефона.

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

Все классы для работы с MSSQL находятся в соответствующем пространстве имен, поэтому добавьте к остальным директивам using в начале файла:

Запустите программу и проверьте на наличие ошибок.

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

Добавьте внутрь класса формы переменные:

Переменная Con будет хранить соединение к базе данных, объекты класса DataTable используются для данных таблиц, булева переменная-флаг UpdateFirms пригодится позже, переменная id_firm – идентификатор текущей выбранной фирмы.

Добавьте в конструктор формы код (отмечен жирным шрифтом):

При создании соединения с БД используется строка соединения (Connection String), содержащая параметры подключения: имя сервера, базы, логин, пароль и др. Ее можно посмотреть, если нажать правой кнопкой в окне Обозреватель серверов на соединении с БД в ветке Подключения данных и выбрать Свойства. Хранение строки непосредственно в коде программы не лучшее решение, так как при смене настроек сервера БД, программу придется перекомпилировать, поэтому чаще ее хранят во внешних конфигурационных файлах.

Конструкция try .. catch используется для перехвата ошибок при исполнении программы. Если в коде, расположенном в блоке try <> произойдет ошибка (исключение Exception), то управление будет немедленно передано в блок catch <>. Исключение является классом, тип класса определяет вид произошедшей ошибки (в нашем случае ошибка класса SqlException), и объект данного класса будет помещен в переменную e для дальнейшей обработки программой.

Так как операция подключения к серверу зависит от многих факторов и далеко не всегда будет успешной (нет сервера, не найден, нет базы, неверный логин и т.п.), то целесообразно проверять этот этап на ошибки. Далее в коде программы перехват ошибок встретится еще не раз.

После подключения создаются таблицы для данных, они назначаются гридам на форме в качестве источников для отображения информации, и идет присоединение столбцов к именам столбцов таблиц в БД. Свойство грида AutoGenerateColumns определяет, будет ли грид сам создавать столбцы. Так как мы их уже создали сами, то отключаем.

Добавьте в класс формы 2 функции:

Событие возникает, когда происходит перемещение курсора по фирмам, при этом нам необходимо получить ID выбранной фирмы (CurrentRow – выбранная строка в гриде, Cells[0] – первый столбец, содержащий идентификаторы), и обновить список моделей телефонов. Если при получении ID фирмы возникнет ошибка, то id_firm = -1 и ф-ция RefreshModels обновлять список не будет.

Осталось заполнить гриды фирмами и моделями при первом запуске программы, для этого воспользуемся событием Shown формы:

private: System::Void Form1_Shown(System::Object^ sender, System::EventArgs^ e)

Запустите программу, попробуйте выбирать разные фирмы для смены моделей. Фактически мы добились просмотра нашей БД сотовых телефонов, пора приступать к редактированию, для чего уже заранее были созданы 3 кнопки в нижней части окна.

Код для кнопки «Добавить»:

С помощью sql запроса insert добавляется новая запись в таблицу моделей с идентификатором текущей выбранной фирмы. Так как sql команда insert (как и все последующие) не возвращает данные в программу, то используется метод ExecuteNonQuery(). После добавления обновляем список моделей, чтобы изменения отразились в гриде.

Код для кнопки «Удалить»:

Через них будет передавать в эту форму из главной объект SqlConnection чтобы иметь возможность выполнять sql команды, и грид моделей чтобы заполнить поля формы информацией о модели. Переменная id для хранения идентификатора модели.

Чтобы при появлении формы на экране в полях уже содержалась информация, создадим событие Shown:

Получение текстовой информации о цвете, модели и др. не представляет труда, они хранятся в столбцах грида по порядку. С полем фото сложнее, так как оно представляет собой двоичную информацию, т.е. массив байт. Вдобавок к этому, объект Image в PictureBox может считывать информацию из файла, потока, или другого такого же объекта, но не из массива. Поэтому чтобы представить массив байт в виде изображения, приходится предварительно записывать его в MemoryStream – поток, хранящий данные в памяти.

Код для кнопки «Загрузить»:

Ничего особенного нет, занесение имени выбранного изображения в PictureBox. Код для кнопки «Сохранить»:

Сохранение информации начинается с текстовых полей. Используется sql команда update, но стоит отметить, что, несмотря на то, что год и вес являются числами, внутри запроса их значения все равно помещаются внутри одиночных кавычек ‘’. Если бы их не было, то в случае, например, если после редактирования значение года выпуска окажется пустым, в sql запросе будет year= что вызовет ошибку на сервере. С кавычками же year=’’, сервер сам выполняет преобразование типов, и пустая строка будет расценена как 0, и ошибки не возникнет.

К сожалению, сохранить подобным образом изображение не получится, так как представить в виде строки массив байт длиной в десятки, сотни килобайт или больше, достаточно сложно. Для таких случаем в классе SqlCommand предусмотрены «параметры» - именованные переменные, начинающиеся в sql запросе с символа @, значения которых можно задавать практически любым способом, включая и просто двоичные массивы. Для получения массива байт изображения из файла используется файловый поток FileStream.

В конце функции закрываем окно с помощью DialogResult, значение OK сообщит основному окну программы, что запись была изменена, и надо обновить грид моделей.

Теперь, когда форма редактирования готова, можно вернуться к основному окну, и добавить код для последней оставшейся кнопки:

Запустите программу и проверьте на наличие ошибок. Теперь можно редактировать модели, загружать фото телефонов в базу, понажимать на заголовки столбцов в гриде для сортировки (встроенная возможность DataGridView). Можно и дальше дорабатывать программу, расширяя ее функциональность, например:

  • Редактирование фирм – можно сделать аналогично моделям
  • Поиск – при заполнении гридов запросом select добавить в строку запроса условия where для заданных критериев поиска
  • Добавить проверку вводимых данных для исключения ошибок
  • Печать отчетов
  • Экспорт данных
  • И многое другое…

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».

Переходим на главную форму и добавляем кнопку «Найти» для поиска записей. Дважды щелкаем на нее и пишем код для вызова нашей новой формы:

Проверяем работоспособность приложения:

Возвращаемся на форму «Поиска». Пишем обработчик событий для кнопки «Закрыть»:

Пишем обработчик событий для кнопки «Найти»:

На главную форму добавляем кнопку «Выход» и пишем для нее код:

Итоговая форма приложения:

Выполнение

1. Создание приложения типа Windows Forms Application .

2. Вызов мастера подключения.

Visual Studio команда "Add New Data Source. "

Рисунок. 1. Вызов мастера подключения к файлу базы данных

3. Выбор типа источника данных.

В результате откроется окно мастера для подключения к источнику данных которое изображено на рис. 2.

MS Visual Studio типа подключения

Рисунок. 2. Выбор типа подключения из которого приложение будет получать данные

В окне необходимо выбрать один из четырех возможных вариантов подключения к источнику данных. В MS Visual Studio существует четыре типа подключения к источникам данных:

  • Database – подключение к базе данных и выбор объектов базы данных;
  • Service – открывает диалоговое окно Add Service Reference позволяющее создать соединение с сервисом, который возвращает данные для вашей программы;
  • Object – позволяет выбрать объекты нашего приложения, которые в дальнейшем могут быть использованы для создания элементов управления ( controls ) с привязкой к данным;
  • Share Point – позволяет подключиться к сайту SharePoint и выбрать объекты для вашей программы.

В нашем случае выбираем элемент Database и продолжаем нажатием на кнопке Next .

4. Выбор модели подключения к базе данных.

Следующий шаг – выбор модели подключения к базе данных (рис. 3).

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

Рис. 3. Выбор модели подключения к базе данных

Система предлагает выбор одного из двух вариантов:

  • модели данных на основе набора данных ( Dataset );
  • модели данных Entity , что означает, что система может сгенерировать модель данных из базы данных которой могут выступать сервера баз данных Microsoft SQL Server , Microsoftt SQL Server Compact 3.5 или Microsoft SQL Server Database File , либо создать пустую модель как отправную точку для визуального проектирования концептуальной модели с помощью панели инструментов.

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

5. Задание соединения с БД.

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

Visual Studio выбор соединения с базой данных

Рис. 4. Выбор соединения с базой данных

Visual Studio добавление нового соединения база данных

Рис. 5. Добавление нового соединения и выбор файла базы данных

Visual Studio смена источника данных

Рис. 6. Смена источника данных

В окне на рисунке 6 системой Microsoft Visual Studio будет предложено следующие виды источников данных:

  • Microsoft Access Database File – база данных Microsoft Access ;
  • Microsoft ODBC Data Source – доступ к базе данных с помощью программного интерфейса ODBC ( Open Database Connectivity );
  • Microsoft SQL Server ;
  • Microsoft SQL Server Compact 3.5 ;
  • Microsoft SQL Server Database File ;
  • Oracle Database – база данных Oracle .

Visual Studio окно "Add Connection"

Visual Studio строка Connection string

Рис. 8. Строка Connection string

В этом каталоге размещаются все основные исходные модули проекта, например Program.cs (модуль, содержащий основную функцию WinMain() ) , Form1.cs (содержит исходный код обработки главной формы приложения) и другие.

Visual Studio добавление файл база данных

Рисунок 9. Окно добавления файла базы данных в проект

6. Формирование конфигурационного файла приложения.

Visual Studio запись строки подключения к базе данных в конфигурационный файл

Рисунок 10. Предложение записи строки подключения к базе данных в конфигурационный файл приложения

Ничего не изменяем, оставляем все как есть (кликаем на Next ).

7. Выбор объектов базы данных для использования в программе

Последнее окно мастера (рисунок 11) предлагает выбрать список объектов (таблиц, запросов, макросов, форм и т.д.), которые будут использоваться в наборе данных. Как правило выбираем все таблицы базы данных. В нашем примере база данных содержит всего одну таблицу с именем Tovar .

Visual Studio выбор объектов базы данных

Рисунок 11. Выбор объектов базы данных, которые будут использоваться в данном наборе данных

8. Что же изменилось в программе после выполнения мастера?

Если выбрать панель Data Source (рисунок 12), то можно увидеть, как подключен набор данных с именем db1Dataset в котором есть таблица с именем Tovar .

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

Рисунок 12. Окно DataSources содержит подключение к базе данных

Visual Studio окно приложения панель Server Explorer

Рис. 13. Окно приложения с изменениями в панели Server Explorer

9. Подключение методов оперирования базой данных.

Для того, чтобы использовать методы, которые будут работать с базой данных MS Access (и не только MS Access ), необходимо подключить пространство имен System.Data.OleDb .

Для этого в основной форме ( Form1.cs ) в Solution Explorer выбираем режим просмотра кода (View Code) из контекстного меню (рис. 14) и вначале файла добавляем следующую строку:

Visual Studio команда View Code

Рисунок 14. Вызов программного кода главной формы приложения ( Form1.cs ) с помощью Solution Explorer

Общий вид верхней части файла Form1.cs будет следующим:

На этом этапе подключение к базе данных db1.mdb выполнено. Дальнейшими шагами есть создание программного кода для оперирования данными в базе данных.

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