Как подключить sql к wpf
SQLite в WPF
Работа с SQLite
SQLite является одной из наиболее используемых систем управления базами данных. Главным преимуществом SQLite является то, что для базы данных не нужно сервера. База данных представляет собой обычный локальный файл, который мы можем перемещать вместе с главным файлом приложения. Кроме того, для запросов к базе данных мы можем использовать стандартные выражения языка SQL, которые равным образом с некоторыми изменениями могут применяться и в других СУБД как Oracle, MS SQL Server, MySQL, Postgres и т.д.
Итак, создадим новый проект WPF, который назовем SQLiteApp. В первую очередь нам надо добавить функциональность SQLite в проект. Для этого мы можем загрузить нужный нам пакет со страницы https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki, и инсталлятор установить все необходимые библиотеки в глобальный кэш сборок (GAC), откуда мы можем выбирать их для проекта.
Либо мы можем добавить SQLite в проект через пакетный менеджер Nuget. Итак, выберем этот способ, перейдем к Nuget, нажав в проекте правой кнопкой на узел References и выбрав в открывшемся контекстном меню пункт Manage NuGet Packages. :
В окне менеджера Nuget введем в окно поиска «SQLite», и менеджер отобразит нам ряд результатов. Из них нам надо установить пакет под названием System.Data.SqlClient :
Данный пакет зависит от трех других пакетов, которые также будут установлены:
Вместе с последним пакетом также будет добавлен Entity Framework. Таким образом, мы сможем работать с базой данных SQLite через ORM-инструмент Entity Framework.
В отличие от работы с MS SQL Server по отношению к SQLite EF 6 не поддерживает автоматическое создание базы данных и ее таблиц через Code First в соответствии со структурой моделей приложения. И в этом случае нам самим надо создавать баз данных и ее таблицы.
Далее нам будет предложено добавить в базу данных таблицы. Определим для таблицы имя «Phones» и добавим четыре столбца Id, Title, Company, Price, как на скриншоте:
Стоит обратить внимание, что столбец Id определен здесь как первичный ключ.
После добавления таблицы мы сможем добавить вручную через DB Browser for SQLite какие-либо данные.
И далее добавим созданную нами базу данных в наш проект. После добавления для файла базы данных установим опцию «Copy if newer», чтобы файл копировался при компиляции в каталог приложения:
Прежде всего здесь определена строка подключения:
Так как созданный нами файл базы данных называется mobiles (к которому DB Browser for SQLite по умолчанию добавляет расширение db ), то в качестве источника данных здесь указан именно «mobiles.db».
провайдера, который будет использоваться для подключения:
Теперь определим в проекте класс, объекты которого будут храниться в базе данных:
При ручном определении модели надо учитывать, что эта модель должна соответствовать таблице из БД. Так, в бд мы создали таблицу Phones, в которой есть целочисленные столбцы Id и Price, соответственно в классе Phone определены свойства Id и Price, представляющие целые числа. То же самое со строковыми столбцами Title и Company, которые по имени и типу данных соответствуют свойствам Title и Company в классе Phone.
И еще один важный момент: Entity Framework по умолчанию применяет некоторые условности при наименовании моделей и таблиц в БД. Так, название таблицы должно представлять название модели во множественном числе в соответствии с правилами английского языка. Так, у нас таблица называется Phones, а класс Phone. То есть условности соблюдены.
Класс контекста должен наследоваться от DbContext. В конструкторе класса в конструктор базового класса передаем название подключения. В данном случае название должно совпадать с названием подключения из App.config.
Теперь все готово для работы с базой данных. Стандартный набор операций по работе с БД включает получение объектов, добавление, изменение и удаление. Для получения и просмотра списка объектов из бд мы будем использовать главное окно. А для добавления и изменения создадим новое окно.
В коде xaml у страницы PhoneWindow.xaml определим следующее содержимое:
Здесь определены три поля ввода для каждого свойства модели Phone и две кнопки для сохранения и отмены.
В коде PhoneWindow.xaml.cs определим контекст для этой страницы:
Данное окно будет диалоговым. Через конструктор оно будет получать объект Phone, который устанавливается в качестве контекста данных.
В коде xaml у главного окна MainWindow определим вывод списка телефонов и набор кнопок для управления этим списком:
В коде C# у этого окна пропишем обработчики кнопок, через которые будем взаимодействовать с базой данных SQLite:
Выражение db.Phones.Load() загружает данные из таблицы Phones в локальный кэш контекста данных. И затем список загруженных объектов устанавливается в качестве контекста данных:
Для добавления вызывается метод Add:
При изменении мы передаем в PhoneWindow копию выбранного объекта. Если мы передавали бы сам выделенный объект, то все изменения на форме автоматически синхронизировались со списком, и не было бы смысла в кнопке отмены.
После получения измененного объекта мы находим его в базе данных и устанавливаем у него состояние Modified, после чего сохраняем все изменения:
Запустим приложение. И добавим какой нибудь объект:
И после добавления объект отобразится в списке:
Взаимодействие с базой данных
Создание базы данных
Прежде всего для работы с базами данных должен быть установлен и запущен MS SQL Server. Все необходимые файлы для загрузки можно найти на офсайте по ссылке MS SQL Server 2014 Express
Назовем базу данных mobiledb и нажмем на кнопку OK:
После этого в левом меню появится узел с только что созданной базой данных. Теперь добавим в нее таблицу. Правой кнопкой мыши нажмем на подузел Tables и в контекстном меню выберем пункт Tables. :
Затем нам открывается дизайнер таблицы:
И в конце нам надо установить курсор на столбец Id и в панели инструментов программы нажать на золотой ключик. После этого напротив поля Id также должен появиться золотой ключик. Этот ключик будет указывать, что столбец Id будет выполнять роль первичного ключа.
После этого нажмем на сохранение и затем на клавишу F5 (обновление), и в узле нашей базы данных появится новая таблица, которая будет называться dbo.Phones:
В центральной части программы открывается код процедуры, который генерируется по умолчанию. Заменим этот код следующим::
Эта процедура выполняет добавление данных. После выражения CREATE PROCEDURE идет название процедуры. Процедура называется «sp_InsertPhone», и по этому названию мы ее будем вызывать в коде C#. Название процедуры может быть любое.
Вообще мы бы могли обойтись и без хранимой процедуры. Однако при подключении из кода C# она нам упростит работу, и в дальнейшем мы посмотрим, в чем ее преимущества. И затем нажмем на кнопку Execute. После этого в базу данных добавляется хранимая процедура.
Теперь подключимся к ней из приложения на WPF.
WPF Подключение к базе данных MS SQL Server
Что такое WPF?
Что такое MS SQL Server?
Как подключиться к Базе Данных MS SQL Server?
Для того, чтобы осуществить подключение к базе данных MS SQL в WPF приложении, нужно создать базу данных (БД) и таблицы. Для начала стоит открыть приложение Microsoft SQL Server Management Studio 2017 или более раннюю версию, и произвести соединение с SQL сервером.
Далее правой кнопкой мыши (ПКМ) нужно щёлкнуть по «Базы данных» и выбрать пункт «Создать базу данных».
Далее следует ввести название полей и тип данных как указано на рисунке 4 и нажать комбинацию клавиш Ctrl+S или иконку сохранения в панели инструментов.
Добавляем запись щёлкая в нужные ячейки таблицы ЛКМ:
Теперь нужно перейти к приложению WPF и у главной формы (MainWindow.xaml.cs) прописать следующую функцию:
Важно отметить что весь текст у будет отмечен красным а при подключении будут возникать ошибки. Вся проблема в том, что нужно добавить несколько библиотек, которые позволяют работать с базой данных, для этого, нужно нажать ПКМ по подчёркнутому красной линией элементу и выбрать пункт «Быстрые действия и рефакторинг. », после из предложенных действий выбрать первый вариант который добавляет библиотеку.
Так же следует сделать и с SqlConnection, добавляя библиотеку System.Data.SqlClient.
В итоге должно появиться две библиотеки:
Разбор строки подключения к базе данных:
Кроме трёх стандартных свойств подключения, так же могут понадобиться такие атрибуты как User и PWD, если сервер будет на удалённой машине. В таком случае строка подключения будет выглядеть следующим образом:
где вместо звёздочек используется ваш логин и пароль, а вместо IP – IP сервера.
После того как ошибки исчезли и приложение запускается, стоит научиться пользоваться данной функцией. Для этого после инициализации компонентов нужно прописать код:
Первой строкой выполняется подключение к базе данных и передаётся запрос, после чего обрабатывается ответ и возвращается обратно. Далее цикл, для перебора строк, поскольку dt_user.Rows представляет собой таблицу где есть строки и столбцы. MessageBox.Show отвечает за вывод окна в котором располагается текст.
dt_user.Rows[i][0] — 1 столбец с логином
dt_user.Rows[i][1] — 2 столбец с паролем
Запустив программу можно увидеть, что данный код работает:
Таким образом можно реализовать подключение к базе данных MS SQL Server.
Использование базы данных SQL Server в приложении UWP
Ваше приложение может подключаться напрямую к базе данных SQL Server и затем хранить и извлекать данные с помощью классов в пространстве имен System.Data.SqlClient.
В данном руководстве приведен один из способов выполнения этой задачи. Если вы установите пример базы данных Northwind поверх экземпляра SQL Server, а затем используете эти фрагменты кода, у вас получится базовый пользовательский интерфейс, в котором демонстрируются продукты из примера базы данных Northwind.
В основе фрагментов кода, представленных в этом руководстве, лежит более полный пример кода.
Сначала следует настроить решение
Чтобы подключить приложение напрямую к базе данных SQL Server, убедитесь, что минимальная версия вашего проекта поддерживает Fall Creators Update. Эти сведения можно найти на странице свойств проекта UWP.
Откройте файл Package.appxmanifest в конструкторе манифестов проекта UWP.
Если для проверки подлинности SQL Server вы используете проверку подлинности Windows, то на вкладке Возможности следует выбрать Корпоративная проверка подлинности.
Вам также нужно выбрать Интернет (клиент сервер), Интернет (клиент) и Частные сети (клиент сервер), независимо от того, используется ли проверка подлинности Windows.
Добавление данных в базу данных SQL Server и их извлечение
В этом разделе будут выполнены следующие действия:
1️⃣ Добавление строки подключения.
2️⃣ Создание класса для хранения данных продукта.
3️⃣ Получение продуктов из базы данных SQL Server.
4️⃣ Добавление базового пользовательского интерфейса.
5️⃣ Заполнение пользовательского интерфейса продуктами.
В этом разделе показан один из способов организации кода доступа к данным. Его задачей является показать пример того, как можно использовать System.Data.SqlClient для хранения данных в базе данных SQL Server и их извлечения. Код можно организовывать таким образом, который лучше всего подходит для проекта приложения.
Добавление строки подключения
Строка подключения указывает на базу данных Northwind в экземпляре SQL Server Express.
Создание класса для хранения данных продукта
Создадим класс, реализующий событие INotifyPropertyChanged, чтобы можно было привязать атрибуты в пользовательском интерфейсе XAML к свойствам этого класса.
Получение продуктов из базы данных SQL Server
Добавление базового пользовательского интерфейса
Добавьте следующий XAML-код в файл MainPage.xaml проекта UWP.
Отображение продуктов в ListView
Запустите проект и посмотрите, как продукты из примера базы данных Northwind отображаются в пользовательском интерфейсе.
Чтобы узнать, что еще можно сделать с данными в базе данных SQL Server, изучите пространство имен System.Data.SqlClient.
Проблемы с подключением к базе данных?
В большинстве случаев необходимо изменить некоторые аспекты конфигурации SQL Server. Если вы можете подключиться к базе данных из другого типа классического приложения, например приложения Windows Forms или WPF, убедитесь, что вы включили TCP/IP для SQL Server. Это можно сделать в консоли Управление компьютером.
Затем убедитесь в том, что служба обозревателя SQL Server запущена.
Дальнейшие действия
Использование облегченной базы данных для хранения данных на устройстве пользователя
Совместное использование кода между разными приложениями на различных платформах
Добавление страниц с основными и подробными данными с помощью серверов Azure SQL
См. статью Customer Orders Database sample (Пример базы данных заказов клиентов).
Создание простого приложения для обработки данных с помощью WPF и Entity Framework 6
эта статья посвящена использованию средств данных в Visual Studio и не пытается объяснить основные технологии в любой глубине. Предполагается, что у вас есть базовые знания XAML, Entity Framework и SQL. В этом примере также не демонстрируется Архитектура Model-View-ViewModel (MVVM), которая является стандартом для приложений WPF. Однако этот код можно скопировать в собственное приложение MVVM с небольшими изменениями.
Установка и подключение к Northwind
в этом примере используется SQL Server Express LocalDB и образец базы данных Northwind. если поставщик данных ADO.NET для этого продукта поддерживает Entity Framework, он также должен работать с другими продуктами SQLной базы данных.
Установите учебную базу данных Northwind, выполнив следующие действия.
Откроется окно редактора запросов.
скопируйте скрипт Transact-SQL Northwind в буфер обмена. этот сценарий T-SQL создает базу данных Northwind с нуля и заполняет ее данными.
По истечении короткого времени выполнение запроса завершается и создается база данных Northwind.
Настройка проекта
в Visual Studio создайте новый проект приложения WPF на C#.
добавьте пакет NuGet для Entity Framework 6. В Обозреватель решений выберите узел проекта. в главном меню выберите Project > управление пакетами NuGet.
теперь можно использовать Visual Studio для создания модели на основе базы данных Northwind.
Создание модели
Щелкните правой кнопкой мыши узел проекта в обозревателе решений и последовательно выберите Добавить > Новый элемент. на левой панели в узле C# выберите данные и в средней области выберите ADO.NET EDM.
на следующем экране введите или выберите подключение LocalDB Northwind (например, (LocalDB) \MSSQLLocalDB), укажите базу данных northwind и нажмите кнопку далее.
На следующей странице мастера выберите таблицы, хранимые процедуры и другие объекты базы данных для включения в модель Entity Framework. Разверните узел dbo в представлении в виде дерева и выберите Customers, Orders и Order Details. Оставьте установленными значения по умолчанию и нажмите кнопку Готово.
Мастер создает классы C#, представляющие модель Entity Framework. Классы являются простыми старыми классами C#, и они являются привязкум к пользовательскому интерфейсу WPF. Файл EDMX описывает связи и другие метаданные, связывающие классы с объектами в базе данных. TT — это шаблоны T4, которые создают код, работающий с моделью, и сохраняет изменения в базе данных. Все эти файлы можно просмотреть в Обозреватель решений в узле Northwind_model.
Область конструктора для файла EDMX позволяет изменять некоторые свойства и связи в модели. Мы не будем использовать конструктор в этом пошаговом руководстве.
Замените первое вхождение HashSet на ObservableCollection около строки 51. Не заменяйте второй экземпляр hash.
Теперь все готово для подключения этой модели к XAML-странице, чтобы можно было просматривать, перемещать и изменять данные.
Привязка модели к странице XAML
можно написать собственный код привязки данных, но гораздо проще позволить Visual Studio сделать это за вас.
Разверните узел проекта и выберите Customer (клиент). (Источники для заказов автоматически формируются из свойства навигации Orders в Customer.)
Нажмите кнопку Готово.
Перейдите к файлу MainWindow. XAML в представлении кода. Мы постоянно используем XAML для целей этого примера. Измените заголовок MainWindow на что-то более описательное и увеличьте его высоту и ширину до 600 x 800. Вы всегда можете изменить его позже. Теперь добавьте эти три определения строк в главную сетку, одну строку для кнопок навигации, одну для сведений клиента и одну для сетки, которая показывает их заказы:
В представлении кода теперь можно увидеть новый Grid элемент в строке 1 (средняя строка) родительской сетки. Родительская сетка имеет DataContext атрибут, который ссылается на CollectionViewSource, добавленный в Windows.Resources элемент. Учитывая этот контекст данных, при привязке первого текстового поля к адресу это имя сопоставляется со Address свойством в текущем Customer объекте в CollectionViewSource.
Когда клиент отображается в верхней половине окна, необходимо просмотреть заказы в нижней половине. Заказы отображаются в одном элементе управления представления сетки. Для работы привязки «основной — подробности» необходимо выполнить привязку к свойству Orders в классе Customers, а не к отдельному узлу Orders. Перетащите свойство Orders класса Customers в нижнюю половину формы, чтобы конструктор поместит его в строку 2:
Visual Studio создала весь код привязки, который подключает элементы управления пользовательского интерфейса к событиям в модели. Для того чтобы увидеть некоторые данные, необходимо написать код для заполнения модели. Сначала перейдите к файлу MainWindow. XAML. CS и добавьте член данных в класс MainWindow для контекста данных. Этот объект, который был создан для вас, действует примерно так же, как элемент управления, отслеживающий изменения и события в модели. Вы также добавите элементы данных CollectionViewSource для клиентов и заказов, а также связанную логику инициализации конструктора. Начало класса должно выглядеть следующим образом:
Добавьте using директиву для System. Data. Entity, чтобы перевести метод расширения нагрузки в область:
Нажмите клавишу F5. Вы должны увидеть сведения для первого клиента, полученного в CollectionViewSource. Их заказы также должны отображаться в сетке данных. Форматирование не имеет ничего хорошего, так что давайте исправляется. Можно также создать способ просмотра других записей и выполнения базовых операций CRUD.
Настройка макета страницы и добавление сеток для новых клиентов и заказов
Сначала добавьте эти стили в Windows.Resources элемент в файле MainWindow. XAML:
Затем замените всю внешнюю сетку этой разметкой:
Добавление кнопок для навигации, добавления, обновления и удаления
в Windows Forms приложениях вы получаете объект BindingNavigator с кнопками для навигации по строкам в базе данных и выполнения базовых операций CRUD. WPF не предоставляет BindingNavigator, но достаточно просто создать его. Это можно сделать с помощью кнопок в горизонтальном StackPanel и связать кнопки с командами, привязанными к методам в коде программной части.
Логика команды состоит из четырех частей: (1) команды, (2) привязки, (3) кнопки и (4) обработчики команд в коде программной части.
Добавление команд, привязок и кнопок в XAML
Сначала добавьте команды в файл MainWindow. XAML внутри Windows.Resources элемента:
CommandBinding сопоставляет RoutedUICommand событие с методом в коде программной части. Добавьте этот CommandBindings элемент после Windows.Resources закрывающего тега:
Теперь добавьте с помощью StackPanel кнопок навигации, добавления, удаления и обновления. Сначала добавьте этот стиль в Windows.Resources :
Во-вторых, вставьте этот код сразу после элемента RowDefinitions для внешнего Grid элемента в верхнюю часть страницы XAML:
Добавление обработчиков команд в класс MainWindow
Код программной части является минимальным, за исключением методов Add и DELETE. Навигация выполняется путем вызова методов для свойства View объекта CollectionViewSource. В этом DeleteOrderCommandHandler примере показано, как выполнить каскадное удаление в заказе. Сначала необходимо удалить связанные с ним Order_Details. UpdateCommandHandler Добавляет нового клиента или заказа в коллекцию или просто обновляет существующего клиента или заказ с учетом изменений, внесенных пользователем в текстовые поля.
Добавьте эти методы обработчика в класс MainWindow в MainWindow. XAML. CS. Если CollectionViewSource для таблицы Customers имеет другое имя, необходимо изменить имя в каждом из этих методов: