Как связать базу данных с c
В этой статье демонстрируется простой способ быстрого получения данных из базы данных. Если приложению необходимо изменить данные с помощью нетривиальных способов и обновить базу данных, следует рассмотреть возможность использования Entity Framework и привязки данных для автоматической синхронизации элементов управления пользовательского интерфейса с изменениями в базовых данных.
С целью упрощения код не включает обработку исключений для выполнения в рабочей среде.
Предварительные требования
Для создания приложения вам потребуются следующие компоненты.
SQL Server Express LocalDB. если у вас нет SQL Server Express LocalDB, его можно установить на странице загрузки SQL Server.
Настройка образца базы данных
Создайте образец базы данных, выполнив следующие действия.
в Visual Studio откройте окно обозреватель сервера .
щелкните правой кнопкой мыши подключения к данным и выберите команду создать новую базу данных SQL Server.
В текстовом поле имя сервера введите (LocalDB) \mssqllocaldb.
В текстовом поле имя новой базы данных введите Sales, а затем нажмите кнопку ОК.
Пустая база данных Sales создается и добавляется в узел подключения к данным в обозреватель сервера.
Щелкните правой кнопкой мыши подключение к данным о продажах и выберите создать запрос.
Откроется окно редактора запросов.
вставьте скрипт T-SQL в редактор запросов, а затем нажмите кнопку выполнить .
По истечении короткого времени выполнение запроса завершается и создаются объекты базы данных. База данных содержит две таблицы: Customer и Orders. Эти таблицы изначально не содержат данных, но их можно добавить при запуске создаваемого приложения. База данных также содержит четыре простые хранимые процедуры.
Создание форм и добавление элементов управления
Создайте проект для приложения Windows Forms и назовите его SimpleDataApp.
Visual Studio создает проект и несколько файлов, включая пустую форму Windows Forms с именем Form1.
Добавьте две формы Windows Forms в проект, чтобы он включал три формы, и назначьте им следующие имена:
Навигация
NewCustomer
FillOrCancel
Для каждой формы добавьте текстовые поля, кнопки и другие элементы управления, которые отображаются на рисунках ниже. Для каждого элемента управления задайте свойства, указанные в таблицах.
Элементы управления "группа" и "надпись" обеспечивают большую ясность, но не используются в коде.
Форма навигации
Форма NewCustomer
Форма FillOrCancel
Сохранение строки подключения
Когда приложение пытается открыть подключение к базе данных, оно должно иметь доступ к строке подключения. Чтобы не вводить строку вручную в каждой форме, сохраните строку в файле App.config в проекте и создайте метод, возвращающий строку при вызове метода из любой формы в приложении.
Строку подключения можно найти, щелкнув правой кнопкой мыши подключение данных о продажах в Обозреватель сервера и выбрав Свойства. Найдите свойство ConnectionString , а затем с помощью клавиш CTRL + A, CTRL + C выберите и скопируйте строку в буфер обмена.
В столбце имя введите connString .
В списке тип выберите (строка подключения).
В списке область выберите приложение.
В столбце значение введите строку подключения (без кавычек), а затем сохраните изменения.
В реальных приложениях строку подключения следует хранить безопасно, как описано в разделе строки подключения и файлы конфигурации.
Написание кода для форм
Этот раздел содержит краткие обзоры того, что делает каждая форма. Он также предоставляет код, определяющий базовую логику при нажатии кнопки на форме.
Форма навигации
Форма навигации открывается при запуске приложения. Кнопка Добавить учетную запись открывает форму NewCustomer. Кнопка Выполнение или отмена заказов открывает форму FillOrCancel. Кнопка Выход закрывает приложение.
Преобразование формы навигации в начальную форму
если вы используете Visual Basic, в обозреватель решений откройте окно свойства , перейдите на вкладку приложение и выберите симпледатаапп. Navigation в списке начальных форм .
Создание автоматически создаваемых обработчиков событий
Дважды щелкните три кнопки в форме навигации, чтобы создать пустые методы обработчика событий. При двойном щелчке кнопки также добавляется автоматически созданный код в файл кода конструктора, который позволяет нажать кнопку для вызова события.
Если пропустить действие двойного щелчка в конструкторе и просто скопировать код и вставить его в файлы кода, не забудьте присвоить обработчику событий правильный метод. Это можно сделать в окне Свойства . Перейдите на вкладку события (воспользуйтесь кнопкой на панели инструментов с молнией) и найдите обработчик щелчка .
Добавление кода для логики формы навигации
На странице кода для формы навигации заполните основные тексты методов для трех обработчиков событий нажатия кнопки, как показано в следующем коде.
Форма NewCustomer
если ввести имя клиента, а затем нажать кнопку создать учетную запись , форма NewCustomer создает учетную запись клиента, а SQL Server возвращает значение идентификатора в качестве нового идентификатора клиента. Затем можно разместить заказ для новой учетной записи, указав сумму и дату заказа и нажав кнопку поместить порядок .
Создание автоматически создаваемых обработчиков событий
Создайте пустой обработчик событий щелчка для каждой кнопки в форме NewCustomer, дважды щелкнув каждую из четырех кнопок. При двойном щелчке кнопки также добавляется автоматически созданный код в файл кода конструктора, который позволяет нажать кнопку для вызова события.
Добавление кода для логики формы NewCustomer
Чтобы завершить логику формы NewCustomer, выполните следующие действия.
System.Data.SqlClient Перенесите пространство имен в область, чтобы не указывать полные имена его членов.
Добавьте в класс некоторые переменные и вспомогательные методы, как показано в следующем коде.
Заполните основные тексты методов для четырех обработчиков событий нажатия кнопки, как показано в следующем коде.
Форма FillOrCancel
Форма Филлорканцел запускает запрос для возврата заказа при вводе идентификатора заказа и нажатия кнопки найти заказ . Возвращенная строка отображается в сетке данных только для чтения. Можно пометить заказ как отмененный (X), если нажать кнопку отменить заказ или пометить заказ как заполненный (F), если нажать кнопку заполнить заказ . Если нажать кнопку найти порядок еще раз, появится обновленная строка.
Создание автоматически создаваемых обработчиков событий
Создайте пустые обработчики событий щелчка для четырех кнопок в форме Филлорканцел, дважды щелкнув кнопки. При двойном щелчке кнопки также добавляется автоматически созданный код в файл кода конструктора, который позволяет нажать кнопку для вызова события.
Добавление кода для логики формы Филлорканцел
Чтобы завершить логику формы Филлорканцел, выполните следующие действия.
Перенесите следующие два пространства имен в область, чтобы не указывать полные имена их членов.
Добавьте в класс переменную и вспомогательный метод, как показано в следующем коде.
Заполните основные тексты методов для четырех обработчиков событий нажатия кнопки, как показано в следующем коде.
Тестирование приложения
Запустите приложение и попробуйте создать несколько клиентов и заказов, чтобы убедиться, что все работает правильно. Чтобы убедиться, что база данных обновлена с учетом внесенных изменений, откройте узел таблицы в Обозреватель сервера, щелкните правой кнопкой мыши узлы Customers и Orders и выберите команду отобразить данные таблицы.
ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных SQL Azure
Эта публикация предназначена для разработчиков C и C++, выполняющих подключение приложений к службе "База данных SQL Azure". Публикация содержит несколько разделов, что дает возможность переходить сразу к интересующей вас теме.
Предварительные требования для выполнения инструкций руководства по C/C++
Убедитесь, что у вас есть указанные ниже компоненты.
- Активная учетная запись Azure. Если у вас нет такой учетной записи, вы можете зарегистрироваться для использования бесплатной пробной версии Azure. . Для разработки и запуска этого примера необходимо установить компоненты языка C++. . Если вы разрабатываете приложение на платформе Linux, необходимо также установить расширение Linux для Visual Studio.
База данных SQL Azure и SQL Server на виртуальных машинах
База данных SQL Azure основана на Microsoft SQL Server и предназначена для обеспечения высокого уровня доступности, производительности и масштабируемости. Использование Azure SQL по сравнению с собственной локальной базой данных дает множество преимуществ. Благодаря Azure SQL вам не нужно устанавливать, настраивать, обслуживать базу данных или управлять ею. Вы работаете только с содержимым и структурой базы данных. В нее встроены такие возможности, как отказоустойчивость и избыточность, которые так важны при работе с базами данных.
В данный момент Azure предлагает два варианта для размещения рабочих нагрузок сервера SQL: База данных SQL Azure (база данных как услуга) и сервер SQL на виртуальных машинах. Мы не будем подробно рассматривать различия между этими двумя вариантами, но отметим, что База данных SQL Azure является лучшим решением для новых облачных приложений, так как она позволяет экономить средства и оптимизировать производительность облачных служб. Если вы рассматриваете возможность переноса или расширения своих локальных приложений в облако, сервер SQL на виртуальной машине Azure может быть хорошим выбором. Чтобы было проще следовать инструкциям в этой статье, создадим экземпляр Базы данных SQL Azure.
Технологии доступа к данным: ODBC и OLE DB
Подключение к Базе данных SQL Azure ничем не отличается от обычной процедуры. В настоящее время существует два способа подключения к базам данных: ODBC и OLE DB. В последние годы корпорация Майкрософт поддерживает ODBC для доступа к собственным реляционным данным. Технология ODBC относительно проста и работает гораздо быстрее, чем OLE DB. Единственное предостережение — ODBC использует старый API в стиле C.
Шаг 1. Создание базы данных SQL Azure
Чтобы узнать, как создать образец базы данных, перейдите на страницу Начало работы . Также это можно сделать с помощью портала Azure, просмотрев короткий 2-минутный видеоролик.
Шаг 2. Получение строки подключения
После подготовки Базы данных SQL Azure необходимо выполнить следующие действия, чтобы найти информацию о подключении и добавить IP-адрес клиента для доступа через брандмауэр.
На портале Azure перейдите к строке подключения ODBC Базы данных SQL Azure с помощью команды Показать строки подключения к базам данных в обзоре базы данных:
Скопируйте содержимое строки ODBC (включает Node.js) [проверка подлинности SQL]. Оно будет использоваться позже для подключения из интерпретатора командной строки ODBC C++. Эта строка содержит такие сведения, как драйвер, сервер и другие параметры подключения к базе данных.
Шаг 3. Добавление IP-адреса в брандмауэр
Перейдите к разделу брандмауэра, где указан сервер, и добавьте IP-адрес клиента с помощью этих действий, чтобы установить подключение.
На этом этапе База данных SQL Azure настроена и готова к подключению из приложения C++.
Шаг 4. Подключение из приложения Windows C/C++
К Базе данных SQL Azure можно подключиться при помощи ODBC в Windows с использованием этого примера, созданного с использованием Visual Studio. В этом примере используется интерпретатор командной строки ODBC, с помощью которого можно подключиться к Базе данных SQL Azure. Данный пример принимает в качестве аргумента командной строки файл с именем базы данных-источника (DSN) или подробную строку подключения, скопированную на портале Azure ранее. Откройте страницу свойств для этого проекта и вставьте строку подключения в качестве аргумента команды, как показано ниже:
Убедитесь, что в строке подключения к базе данных указаны правильные сведения для проверки подлинности.
Запустите приложение, чтобы создать его. Должно появиться следующее окно, подтверждающее успешность подключения. Чтобы проверить подключение базы данных, можно выполнить базовые команды SQL, например создать таблицу:
Кроме того, файл DSN можно создать при помощи мастера, который запускается, если не указаны аргументы командной строки. Рекомендуется попробовать и этот вариант. Этот файл DSN можно использовать для автоматизации и защиты параметров проверки подлинности:
Поздравляем! Вы успешно установили подключение к базе данных SQL Azure при помощи C++ и ODBC в Windows. Чтобы сделать то же самое для платформы Linux, см. сведения дальше в этой статье.
Шаг 5. Подключение из приложения Linux C/C++
Возможно, вы еще не знаете об этом, но теперь в Visual Studio можно разрабатывать приложения C++ для Linux. Об этой новой возможности можно прочитать в записи блога Visual C++ for Linux Development (Разработка Visual C++ для Linux). Чтобы создавать приложения для Linux, необходим удаленный компьютер, на котором запущен дистрибутив Linux. Если у вас нет такого компьютера, его можно быстро настроить при помощи виртуальных машин Linux Azure.
Для выполнения инструкций этого руководства предположим, что у вас настроен дистрибутив Linux Ubuntu 16.04. Описанные здесь действия также должны работать для Ubuntu 15.10, Red Hat 6 и Red Hat 7.
С помощью следующих действий устанавливаются библиотеки, необходимые вашему дистрибутиву для SQL и ODBC:
Запустите Visual Studio. Последовательно выберите "Средства" -> "Параметры" -> "Кроссплатформенный" -> "Диспетчер соединений" и добавьте подключение к компьютеру под управлением Linux:
После того как установлено подключение по протоколу SSH, создайте шаблон пустого проекта (Linux):
Затем можно добавить новый исходный файл C и заменить его этим содержимым. Используя API ODBC SQLAllocHandle, SQLSetConnectAttr и SQLDriverConnect, можно инициализировать и установить подключение к базе данных. Как и для образца Windows ODBC, необходимо заменить вызов SQLDriverConnect сведениями из параметров строки подключения к базе данных, ранее скопированными на портале Azure.
Последнее что необходимо выполнить перед компиляцией — добавить odbc в качестве зависимости библиотеки:
Чтобы запустить приложение, откройте консоль Linux из меню Отладка:
Если подключение успешно, вы увидите имя текущей базы данных в консоли Linux:
Поздравляем! Вы успешно выполнили инструкции руководства и теперь можете подключиться к Базе данных SQL Azure из C++ на платформах Windows и Linux.
Получение полного решения C/C++ для этого руководства
Решение GetStarted, содержащее все примеры из этой статьи, можно найти в таких разделах GitHub:
Класс DataContext предназначен для преобразования запросов на получение объектов в запросы SQL, которые должны выполняться в базе данных, и последующей сборки объектов из результатов. DataContextВключает Language-Integratedный запрос (LINQ), реализуя тот же шаблон оператора, что и стандартные операторы запросов, такие как Where и Select .
Одной из важнейших задач является обеспечение безопасности подключения. Дополнительные сведения см. в разделе Безопасность в LINQ to SQL.
Пример 1
В следующем примере класс DataContext используется для подключения к учебной базе данных "Northwind" и извлечения строк заказчиков, расположенных в Лондоне.
Каждая таблица базы данных представлена коллекцией Table , доступной с помощью метода GetTable. Для идентификации таблицы используется класс сущностей.
Пример 2
Рекомендация заключается в объявлении строго типизированного класса DataContext вместо использования базового класса DataContext и метода GetTable. Строго типизированный класс DataContext объявляет все коллекции Table в качестве членов контекста, как показано в следующем примере.
После этого создание запроса на получение клиентов из Лондона можно осуществить более простым способом:
Для создания подключения к MS SQL Server применяется класс SqlConnection из пространства имен Microsoft.Data.SqlClient.
Этот класс имеет три конструктора:
Второй и третий конструкторы в качестве первого параметра принимают строку подключения. Третий конструктор также принимает объект SqlCredential , который фактически представляет логин и пароль.
Теперь проверим подключение на примере сервера LocalDB:
В данном случае подключение осуществляется к серверу LocalDB и его базе данных master (по умолчанию база данных master уже должна быть на любом MS SQL Servere).
Для начала взаимодействия с базой данных нам надо открыть подключение с помощью методов Open() (синхронный) или OpenAsync() (асинхронный).
По окончании работы с SqlConnection необходимо закрыть подключение к серверу, вызвав метод Close()/CloseAsync() или Dispose()/DisposeAsync() . В данном случае вначале проверяем, что подключение открыто и, если оно открыто, вызываем асинхронный метод OpenAsync() .
В итоге, если указана валидная строка подключения, то мы должны увидеть на консоли следующие строки:
Вместо явного закрытия подключения также можно использовать конструкцию using , которая автоматически закрывает подключение:
Получение информации о подключении
Объект SqlConnection обладает рядом свойств, которые позволяют получить информацию о подключении:
Чтобы хранить данные, нам естественным образом нужна база данных. Как правило, в качестве базы данных используется MS SQL Server, на примере которого мы и посмотрим весь процесс создания БД и подключения к ней.
Мы можем создать базу данных прямо в проекте, либо же создать ее на сервере MS SQL. Для хранения баз данных проекте у нас предназначена папка App_Data. Для этого нажмем правой кнопкой мыши на папку App_Data и в появившемся контекстном меню выберем Add-> New Item. . В появившемся окне добавления нового элемента выберем SQL Server Database и назовем новую базу данных Bookstore.mdf:
Мы можем создать базу данных равнозначным образом и на сервере. После этого база данных добавляется в проект, и мы можем увидеть ее в папке App_Data. Теперь в обозревателе баз данных (окно Database Explorer ) мы можем подключиться к ней и создать таблицы, которые будут хранить данные.
Раскроем узел Bookstore.mdf и найдем узел Tables. Нажмем на этот узел правой кнопкой мыши и в появившемся меню выберем пункт Add New Table . И перед нами появится окно, в котором нам надо определить названия и типы столбцов новой таблицы. По соглашениям о наименованиях таблицы при работе с Entity Framework должны соответствовать имени модели. То есть, так как наша модель называется Book , то таблица будет называться Books . А Entity Framework автоматически распознает, что таблица Books соответствует классу Book .
Итак, создадим структуру таблицы:
Не забудьте установить ниже в окне Properties (в Visual Stidio 2010 - окно Column Properties) для столбца Id соответствующие параметры для первичного ключа:
После этого, если мы работаем с Visual Studio 2010, нам будет предложено просто ввести имя таблицы - введем имя Books, и затем таблица добавляется в БД.
А в Visual Studio Express 2012 for Web нам надо сгенерировать таблицу на основе заданного выше определения. Для этого нажмем на кнопку Update:
В появившемся диалоговом окне нажмем на кнопку Update Database. После этого в нашу базу данных добавляется только что сгенерированная таблица. Подобным образом определим таблицу Purchases для модели Purchase:
Добавим в таблицу Books несколько записей:
Теперь, во-первых, чтобы взаимодействовать с БД, нам нужен класс контекста данных, пусть это будет следующий класс BookContext:
Во-вторых, определим строку подключения к БД. Для этого откроем файл Web.config и добавим в конец секции configuration определение строки подключения. Однако тут надо сразу заметить, что для Visual Studio 2010 строка подключения будет отличаться от строки подключения, которая используется в Visual Studio 2012.
Итак, строка подключения для Visual Studio 2010 будет выглядеть так:
Для Visual Studio 2012 будет выглядеть определение строки подключения будет выглядеть следующим образом:
В Visual Studio 2012 в отличие от 2010-й версии мы можем использовать режим LocalDB, который предназначен прежде всего для разработчиков, представляя некоторую упрощенную версию. Поэтому в данном случае в качестве источника данных используется (LocalDB)\v11.0.
Обратите внимание, что в обоих случаях свойство name="BookContext" должно содержать название контекста данных.
Использование подстановки |DataDirectory| позволяет опустить полный физический путь к базе данных, которая хранится в папке App_Data.
Теперь мы можем получить содержимое таблицы Books в контроллере Home:
И вывести данные в представлении Index.cshtml:
Закрытие подключения
Чтобы наверняка быть уверенным, что подключение к базе данных закрыто, следует вызывать метод Dispose у контекста данных:
Это переопределенная версия метода Dispose контроллера, которая вызывается при уничтожении объекта контроллера. В нее помещается вызов db.Dispose() , который уничтожает все связанные с контекстом данных ресурсы и подключения.
Читайте также: