Работа с базами данных в C# и .NET
Для работы с базами данных в C# и .NET применяется технология ADO.NET. Для упрощения работы с базами данных также применяется Entity Framework — технология ORM, которая позволяет сопоставлять сущностей C# с таблицами в базе данных. В данном разделе будут выкладываться примеры, где используются подключения к БД с помощью вышеупомянутых технологий.
Руководства по работе с базами данных
- Руководство по Entity Framework Core 8 25.11.2023
- Руководство по работе с MongoDB в C# 30.10.2022
- Руководство по ADO.NET и работе с базами данных в C# 14.02.2021
- Руководство по Entity Framework Core 5(неактуальный материал) 27.10.2020
- Руководство по ADO.NET и работе с базами данных(неактуальный материал) 15.10.2015
- Руководство по Entity Framework (неактуальный материал) 26.04.2014
Основы работы с базами SQL

В программировании и IT часто приходится работать с базами данных. Это специальные электронные массивы (таблицы) с информацией упорядоченного характера.
В данной статье речь зайдет о том, как создать базу данных SQL. Дополнительно будут затронуты основы работы с БД.
Предварительная подготовка и общий план
Лучше всего создавать рассматриваемые элементы при помощи Microsoft SQL Server. Для этого необходимо провести небольшую предварительную подготовку:
- Установить СУБД Microsoft SQL Server. Новичкам подойдет версия Express.
- Удостовериться в наличии на компьютере SQL Server Management Studio (SSMS). Он является основным инструментом, который помогает разрабатывать баз данных MS SQL Server. Среда полностью бесплатная.
- Сформировать (спроектировать) изначальную базу данных. Перед тем, как проводить создание проекта в электронном виде, его нужно тщательно продумать. В процессе планирования рекомендуется определиться с сущностями, хранимыми в «таблице». Сюда же относят характеристики, свойства, ограничения, а также иные правила отображения и классификации. Все это поможет сделать БД максимально удобной и эффективной.
- Создать пустую БД. В SSMS процедура реализовывается несколькими методами: через графический интерфейс, а также посредством языка T-SQL.
- Создать таблицы. Обычно на данном этапе уже есть готова БД, но без внесенных в нее сведений. Этот шаг характеризуется не только формированием таблиц, но и заданием тех или иных ограничений.
- Наполнить «массив» информацией.
- Создать иные databases объекты. Сюда включены функции, триггеры, процедуры.
Это – общий алгоритм. Перед тем, как приступать к активным действиям, нужно тщательно изучить Microsoft SQL Server, а также язык T-SQL или MySQL. В противном случае при реализации поставленной задачи не исключены серьезные проблемы.
Создание пустой базы
Создание базы данных – не самый сложный процесс, если действовать последовательно. Заострим внимание на формирование пустой БД. Данный вариант предусматривает два способа реализации – через специализированный язык, а также при помощи встроенного графического интерфейса.
Графический интерфейс
Для того, чтобы воспользоваться соответствующим алгоритмом, необходимо:
- Запустить Server Management Studio.
- Подключиться к серверу.
- Открыть обозреватель объектов и кликнуть по блоку «Базы данных» правой кнопкой мыши. В появившемся меню выбрать команду «create database».
- Изучить появившееся меню. Обязательным для заполнения является только поле «Имя базы данных». Оставшиеся параметры можно заполнить по мере необходимости.
- Нажать на кнопку «Ок».
Среда вследствие выполнения описанного алгоритма создает базу данных без внесенных в нее сведений. Если объект с указанным в свойствах ранее именем отсутствует, он будет сформирован и отображен в обозревателе.
Через T-SQL
Второй вариант, помогающий сделать новую базу данных – это использование T-SQL. Он еще более простой, чем действия при помощи графического интерфейса. Достаточно указать специальную команду на языке запросов:
- Открыть редактор SQL-запросов. Для этого нужно кликнуть на панели инструментов по кнопке «Создать запрос».
- Ввести инструкцию: create database nameDB. NameDB – это имя БД.
- Нажать на кнопку «Выполнить».
Произойдет creating database. Это элементарный вариант. Таким способом можно сделать БД, которая будет обладать теми же характеристиками и параметрами, что и при использовании графического интерфейса.
Выше – наглядный пример того, как создается TestDB в каталоге DataBases на разделе жесткого диска с именем D.
В MySQL
В MySQL делать БД тоже достаточно легко. Для этого используется оператор create database. После него нужно указать имя создаваемого объекта при помощи create schema.
Выше – пример created database MySampleDB. Для того, чтобы исключить конфликты имен, можно использовать опцию if not exists. Эта «команда» создаст БД только тогда, когда ее название является уникальным.
Удаление
Иногда возникает потребность в удалении БД. В реальной жизни подобные ситуации возникают редко, но знать о дальнейших действиях при подобных обстоятельствах нужно.
Удаление может производиться так, как и creates – через графический интерфейс, а также при помощи специальных команд и операторов. В первом случае потребуется:
- Открыть «Обозреватель объектов».
- Найти интересующий элемент и кликнуть правой кнопкой мыши по нему.
- Выбрать команду «Удалить». Откроется меню удаления.
- Выбрать объекты (если их несколько), а затем подтвердить операцию. На данном этапе рекомендуется поставить отметку около пункта «Закрыть существующие соединения». Это поможет избавиться от существующих подключений.
Удалить базу данных можно только тогда, когда с ней никто не работает. Это касается не только сторонних пользователей, но и самой SSMS.
Если нужно избавиться от БД при помощи T-SQL, подойдет команда:
Здесь можно увидеть больше информации о том, как грамотно работать с созданием БД в Microsoft Server.
Начинаем работать с базами данных SQL
Большинство веб-приложений хранят некоторые данные, необходимые для работы, на сервере. Например, движок блога хранит все записи блога, причём каждая запись в этом случае представляет собой текст, заголовок, дату создания и, возможно, целый набор дополнительных данных, необходимых данному блоговому движку для отображения записи блога на сайте.
Сервер онлайн-игры, скорее всего, будет сохранять информацию об игроках и их достижениях.
Онлайн-система учёта личных расходов будет хранить на сервере стоимость сделанных покупок и движения средств на счетах.
Все эти примеры объединяет одно: необходимость хранения данных на стороне сервера. Причём, данные в разных случаях имеют различную структуру, которая зависит от конкретного веб-приложения. Для решения задачи хранения данных на сервере в подавляющем большинстве случаев используются базы данных. Система, реализующая механизм работы с базами данных, называется Система Управления Базами Данных (СУБД, или DBMS, database management system). Для простоты пока будем рассматривать только так называемые реляционные базы данных.
Структура базы данных
Каждая база данных состоит из набора таблиц. Таблица — это набор записей, состоящих из некоторого набора полей. Все записи одной таблицы имеют одинаковый набор полей, задаваемый этой таблицей. Разные таблицы могут задавать разные наборы полей. У таблиц, как и у каждого поля в этих таблицах, есть свои имена. Имена таблиц уникальны в пределах одной базы данных, а имена полей уникальны в пределах таблицы, где эти поля находятся. Каждое поле таблицы имеет свой тип: например, целое число, текстовая строка, дата, и так далее.
Вот пример содержимого таблицы users, состоящей из трёх полей (id, login, password) и трёх записей:
| users | ||
| id | login | password |
| 1 | admin | 123456 |
| 2 | alex | alex123 |
| 3 | marfa | 409ghr |
По сути, каждая таблица предназначена для описания объектов некоторого типа, а каждая запись в таблице — описание конкретного объекта. В примере выше каждая запись таблицы описывает пользователя: его номер, а также логин и пароль.
Механизм СУБД позволяет создавать и удалять таблицы. Содержимое таблиц также можно изменять: можно добавлять новые записи, изменять уже существующие, а также удалять записи из таблиц. Данные, хранящиеся в таблицах, можно извлекать при необходимости. В обязанности СУБД входит обеспечение максимальной скорости и производительности при операциях с таблицами и их содержимым.
Работа с базами данных из программ
Для любых действий с базой данных, как правило, используется специальный стандартный язык, который называется SQL (structured query language, язык структурированных запросов). Это достсточно простой язык, который позволяет выполнять все необходимые действия над базой данных, а это:
- создание и удаление таблиц, а также изменение структуры таблиц;
- добавление и изменение записей в таблицах, удаление записей;
- выборка записей из таблиц.
Простой пример с таблицей users
Чтобы проиллюстрировать изложенное выше, предлагаю проделать это своими руками. Для этого нам понадобится база данных и инструмент, с помощью которого можно будет отправлять в базу запросы на языке SQL и наблюдать результат.
Для начала скачаем и установим: MySQL server — бесплатная версия самого популярного сервера баз данных, MySQL Workbench — инструмент для работы с базами данных. MySQL Workbench, кроме SQL-запросов, позволяет работать с базами данных и через графические представления: отображается структура таблиц, свойства полей и многое другое.
Когда сервер СУБД MySQL запущен и MySQL Workbench открыт, можно приступить к экспериментам. Для этого надо подключиться к базе данных по имени test, которая создаётся при установке сервера MySQL. Далее, для создания таблицы users со структурой, как приведено выше, будет достаточно такого SQL-запроса:
CREATE TABLE users ( id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), password VARCHAR(60) )
Добавление записей в созданную таблицу выглядит так:
INSERT INTO users (name, password) VALUES ('admin', '123456'); INSERT INTO users (name, password) VALUES ('alex', 'alex123'); INSERT INTO users (name, password) VALUES ('marfa', '409ghr');
Теперь, чтобы извлечь из таблицы ранее сохраненные данные, можно выполнить, например, такой запрос:
SELECT * FROM users WHERE name='alex'
на что сервер вернёт данные из таблицы:
'2', 'alex', 'alex123'
Более глубоко изучить возможности SQL Вы сможете в дальнейшем. Есть множество ресурсов, предоставляющих полное справочное руководство по языку SQL. В частности, справочник на сайте MySQL (правда, на английском языке) содержит наиболее полное описание языка, используемого в сервере MySQL.
Начало работы с базами данных

Базы данных и веб-приложения могут принести большую пользу вашему бизнесу. Проектирование базы данных играет важнейшую роль в достижении ваших целей независимо от того, что вам нужно: управлять сведениями о сотрудниках, предоставлять еженедельные отчеты по данным или отслеживать заказы клиентов. Уделив время изучению всех нюансов проектирования баз данных, вы сможете создавать базы, которые будут не только отвечать вашим текущим требованиям, но и адаптироваться к изменениям.
Важно: Веб-приложения Access отличаются от классических баз данных. В этой статье не рассматривается проектирование веб-приложений.
Понятия и термины
Для начала рассмотрим основные термины и понятия. Чтобы спроектировать полезную базу данных, необходимо создать таблицы с данными по одному объекту. В таблицах можно собрать все данные по этому объекту и отобразить их полях, которые содержат наименьшую единицу данных.
Реляционные базы данных
База данных, в которой данные разделены на таблицы по типу электронных. Каждая таблица включает данные по одному объекту, например по клиентам (одна таблица) или товарам (другая таблица).
Записи и поля
Области хранения отдельных данных в таблице. В каждой строке (или записи) хранится уникальный элемент данных, например имя клиента. Столбцы (или поля) содержат сведения по каждой точке данных в виде наименьшей единицы: имя может находиться в одном столбце, а фамилия — в другом.
Первичный ключ
Значение, которое обеспечивает уникальность каждой записи. Допустим, есть два клиента с одинаковыми именами, например Юрий Богданов. Но у одного из них первичный ключ записей — 12, а у другого — 58.
Иерархические отношения
Общие связи между таблицами. Например, у одного клиента может быть несколько заказов. Родительские таблицы имеют первичные ключи. Детские таблицы имеют внешниеключи , которые являются значениями из первичного ключа, которые показывают, как записи детской таблицы связаны с родительской таблицей. Эти ключи связаны отношением.
Что понимать под хорошим проектированием базы данных?
В основе проектирования хорошей базы данных лежат два принципа:
- Избегайте повторяющихся сведений (избыточных данных). Они занимают много места на диске и повышают вероятность ошибок.
- Следите за правильностью и полнотой данных. Неполные или неправильные сведения отображаются в запросах и отчетах, что в конечном итоге может привести к принятию ошибочных решений.
Чтобы избежать этих проблем:
- Разделяйте информацию в базе данных по таблицам для отдельных объектов. Избегайте повторения информации в нескольких таблицах. (Например, имена клиентов должны находиться только в одной таблице.)
- Объединяйте таблицы с помощью ключей, а не путем дублирования данных.
- Используйте процессы, которые обеспечивают точность и целостность информации в базе данных.
- Проектируйте базу данных с учетом своих требований к обработке данных и созданию отчетов по ним.
Чтобы повысить пользу баз данных в долгосрочной перспективе, выполните следующие пять шагов по проектированию:
Шаг 1. Определение назначения базы данных
Прежде чем начать, сформулируйте цель базы данных.
Дополнительные сведения
Чтобы спроектировать специализированную базу данных, определите ее назначение и часто обращайтесь к этому определению. Если вам нужна небольшая база данных для домашнего бизнеса, можно дать простое определение, например: «Эта база данных содержит список сведений о клиентах для рассылки и создания отчетов». Для корпоративной базы данных можно дать определение из нескольких абзацев, в котором будет описано, когда и как люди с различными ролями используют базу данных и содержащуюся в ней информацию. Создайте специальное и подробное определение цели и периодически обращайтесь к нему в процессе проектирования.
Шаг 2. Поиск и упорядочение необходимых сведений
Соберите все типы данных, которые необходимо записывать, например названия товаров и номера заказов.
Дополнительные сведения
Начните с существующих сведений и методов отслеживания. Предположим, вы записываете заказы на покупку в книге учета или ведете записи о клиентах в бумажных формах. Используйте эти источники, чтобы создать список собираемых сведений (например, всех полей в формах). Если в настоящее время вы не собираете важные сведения, подумайте, какие дискретные данные вам необходимы. Каждый отдельный тип данных становится полем в вашей базе данных.
Не беспокойтесь, если ваш первый список несовершенен — вы сможете доработать его со временем. Однако всегда помните о людях, которые будут пользоваться этой информацией, и учитывайте их мнение.
Затем подумайте, что вы ждете от своей базы данных и какие отчеты или рассылки вы хотите создавать. Убедитесь, что вы собираете данные, которые отвечают этим целям. Например, если вам нужен отчет о продажах по регионам, вам необходимо собирать данные о продажах на региональном уровне. Попробуйте сделать набросок желаемого отчета, используя фактические данные. Затем составьте список данных, необходимых для создания отчета. Сделайте то же самое для рассылок или других выходных данных, которые нужно получить из базы данных.
Предположим, вы даете клиентам возможность подписаться на периодическую рассылку (или отказаться от нее) и хотите распечатать список подписавшихся пользователей. Вам нужно создать столбец «Отправка почты» в таблице «Клиенты» с допустимыми значениями «Да» и «Нет».
Для тех, кто хочет получать рассылку, вам нужно добавить электронный адрес, что также требует отдельного поля. Если вы хотите использовать соответствующее обращение к получателю (например, «Уважаемый» или «Уважаемая»), добавьте поле «Обращение». Если в письмах вы хотите обращаться к клиентам по имени, добавьте поле «Имя».
Совет: Не забывайте разбивать данные на наименьшие единицы, например имя и фамилию в таблице «Клиенты». Вообще, если вы хотите выполнять сортировку, поиск, вычисления или отчет на основе элемента данных (например, фамилии клиента), следует поместить этот элемент в отдельное поле.
Шаг 3. Разделение данных по таблицам
Разделите элементы данных на основные объекты, например товары, клиенты или заказы. Каждый объект выносится в таблицу.
Дополнительные сведения
После создания списка необходимых сведений определите основные объекты, необходимые для организации данных. Избегайте повторения данных между объектами. Например, предварительный список для базы данных по продажам товаров может выглядеть так:

К основным объектам относятся клиенты, поставщики, товары и заказы. Поэтому начните с соответствующих четырех таблиц: по клиентам, поставщикам и т. д. Возможно, ваша конечная цель состоит не в этом, но это будет хорошим началом.
Примечание: Лучшие базы данных содержат несколько таблиц. Избегайте искушения поместить все данные в одну таблицу. Это приведет к повторению информации, увеличению размера базы данных и повышению вероятности ошибок. Каждый элемент данных должен записываться только один раз. Если вы обнаружите повторяющиеся сведения, например адрес поставщика, измените структуру базы данных так, чтобы эта информация находилась в отдельной таблице.
Чтобы понять, почему чем больше таблиц, тем лучше, рассмотрим следующую таблицу:

Каждая строка содержит сведения о товаре и его поставщике. Так как у вас может быть несколько продуктов от одного поставщика, имена и адреса поставщиков должны повторяться многократно. Это пустая трата места на диске. Вместо этого зафиксировать сведения о поставщике только один раз в отдельной таблице «Поставщики» и связать ее с таблицей «Товары».
Вторая проблема проектирования возникает тогда, когда нужно изменить сведения о поставщике. Предположим, вам нужно изменить адрес поставщика. А так как адрес указан во многих полях, можно случайно изменить его в одном поле и забыть изменить в других. Эту проблему можно решить, записав адрес поставщика только в одном поле.
Наконец, предположим, у вас есть только один товар, поставляемый компанией Coho Winery, и вы хотите удалить этот товар, но сохранить имя и адрес поставщика. Как удалить запись о товаре, не потеряв сведений о поставщике, с такой структурой базы данных? Это невозможно. Так как каждая запись содержит информацию о товаре вместе с данными о поставщике, их невозможно удалить по отдельности. Чтобы разделить эти сведения, необходимо сделать из одной таблицы две: одну — для сведений о товаре, другую —для сведений о поставщике. И только после этого удаление записи о товаре не будет приводить к удалению сведений о поставщике.
Шаг 4. Превращение элементов данных в столбцы
Определите, какие данные необходимо хранить в каждой таблице. Эти отдельные элементы данных становятся полями в таблице. Например, таблица «Сотрудники» может содержать такие поля, как «Фамилия», «Имя» и «Дата приема на работу».
Дополнительные сведения
После выбора объекта для таблицы базы данных столбцы в ней должны содержать сведения только об этом объекте. Например, таблица по товарам должна содержать сведения только о товарах, а не о поставщиках.
Чтобы определить, какие данные нужно отследить в таблице, используйте ранее созданный список. Например, таблица «Клиенты» может содержать такие поля: «Имя», «Фамилия», «Адрес», «Отправка почты», «Обращение» и «Электронный адрес.» Каждая запись (клиент) в таблице содержит один и тот же набор столбцов, поэтому по каждому клиенту можно хранить одинаковую информацию.
Создайте первый список, а затем просмотрите и уточните его. Не забудьте разбить данные на наименьшие возможные поля. Например, если исходный список имеет адрес в качестве поля, разобьйте его на Адрес, Город, Область и Почтовый индекс или, если ваши клиенты являются глобальными, на еще большее поле. Это, например, позволяет выполнять рассылки в правильном формате или отчет по заказам по штатам.
Доработав столбцы с данными во всех таблицах, вы готовы выбрать первичный ключ для каждой из них.
Шаг 5. Задание первичных ключей
Выберите первичный ключ для каждой таблицы. Первичный ключ, например код товара или код заказа, является уникальным идентификатором каждой записи. Если у вас нет явного уникального идентификатора, его можно создать с помощью Access.
Дополнительные сведения
Вам нужно однозначно определить каждую строку в каждой таблице. Вернемся к примеру с двумя клиентами с одинаковым именем. Так как у них одно и то же имя, им нужно дать уникальный идентификатор.
Поэтому каждая таблица должна содержать столбец (или набор столбцов), который однозначно определяет каждую строку. Это и есть первичный ключ. Он часто является уникальным числом, например кодом сотрудника или порядковым номером Используя первичные ключи, Access быстро связывает данные из нескольких таблиц и сводит их для вас воедино.
Иногда первичный ключ состоит из нескольких полей. Например, в таблице «Сведения о заказе», которая содержит позиции по заказам, первичный ключ может включать два столбца: «Код заказа» и «Код товара». Если в первичном ключе используется несколько столбцов, он также называется составным ключом.

Если у вас уже есть уникальный идентификатор для данных в таблице, например номера товаров, однозначно определяющие каждый продукт в каталоге, используйте его, но только если эти значения соответствуют следующим правилам первичных ключей:
- Идентификатор для каждой записи всегда уникален. Повторяющиеся значения в первичном ключе не допускаются.
- Для каждого элемента всегда существует значение. Каждая запись в таблице должна иметь первичный ключ. Если вы создаете ключ с помощью нескольких столбцов, например «Группа позиций» и «Код позиции», всегда должны присутствовать оба значения.
- Первичный ключ представляет собой неизменное значение. Так как на ключи ссылаются другие таблицы, при любом изменении первичного ключа в одной таблице необходимо изменить его во всех других. Частые изменения повышают риск возникновения ошибок.
Если у вас нет явного идентификатора, то в качестве первичного ключа используйте произвольный уникальный номер. Например, вы можете присвоить каждому заказу уникальный номер, только чтобы идентифицировать его.
Совет: Чтобы создать уникальный номер в качестве первичного ключа, добавьте столбец, используя тип данных «Счетчик». Этот тип данных автоматически присваивает каждой записи уникальное числовое значение. Такой идентификатор не содержит фактических сведений о строке, которую он представляет. Он идеален в качестве первичного ключа, так как в отличие от ключей, содержащих фактические данные о строке (например, номер телефона или имя клиента), числа не изменяются.