Как подключить wpf к mysql workbench
В прошлой теме была создана база данных, теперь подключимся к ней из приложения. В любом проекте WPF, как и в ряде других типов проектов для .NET, по умолчанию есть файл конфигурации, который называется app.config и который имеет следующее содержимое:
Добавим в него строку подключения к бд, изменив файл следующим образом:
Для определения всех подключений в программе в пределах узла добавляется новый узел . В этом узле определяются строки подключения с помощью элемента . Каждая строка подключения имеет название, определяемое с помощью атрибута name . В данном случае строка подключения называется «DefaultConnection». Название может быть произвольное.
Атрибут connectionString собственно хранит строку подключения. Он состоит из трех частей:
- Data Source=.\SQLEXPRESS : указывает на название сервера. По умолчанию для MS SQL Server Express используется «.\SQLEXPRESS»
- Initial Catalog=mobiledb : название базы данных. Так как база данных называется mobiledb, то соответственно здесь данное название и указываем
- Integrated Security=True : задает режим аутентификации
Так как мы будем подключаться к базе данных MS SQL Server, то соответственно мы будем использовать провайдер для SQL Server, функциональность которого заключена в пространстве имен System.Data.SqlClient.
Далее определим код графического интерфейса в xaml:
" Header="Модель" Width="120"/> " Header="Производитель" Width="125"/> " Header="Цена" Width="80"/>
Здесь определен довольно простой интерфейс: датагрид для отображения данных, и две кнопки для обновления данных в бд и для удаления. В итоге приложение будет выглядеть следующим образом:

Теперь определим код подключения и все обработчики кнопок в файле кода c#:
using System; using System.Windows; using System.Windows.Controls; using System.Data.SqlClient; using System.Data; using System.Configuration; namespace DbApp < public partial class MainWindow : Window < string connectionString; SqlDataAdapter adapter; DataTable phonesTable; public MainWindow() < InitializeComponent(); // получаем строку подключения из app.config connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; >private void Window_Loaded(object sender, RoutedEventArgs e) < string sql = "SELECT * FROM Phones"; phonesTable = new DataTable(); SqlConnection connection=null; try < connection = new SqlConnection(connectionString); SqlCommand command = new SqlCommand(sql, connection); adapter = new SqlDataAdapter(command); // установка команды на добавление для вызова хранимой процедуры adapter.InsertCommand = new SqlCommand("sp_InsertPhone", connection); adapter.InsertCommand.CommandType = CommandType.StoredProcedure; adapter.InsertCommand.Parameters.Add(new SqlParameter("@title", SqlDbType.NVarChar, 50, "Title")); adapter.InsertCommand.Parameters.Add(new SqlParameter("@company", SqlDbType.NVarChar, 50, "Company")); adapter.InsertCommand.Parameters.Add(new SqlParameter("@price", SqlDbType.Int, 0, "Price")); SqlParameter parameter = adapter.InsertCommand.Parameters.Add("@Id", SqlDbType.Int, 0, "Id"); parameter.Direction = ParameterDirection.Output; connection.Open(); adapter.Fill(phonesTable); phonesGrid.ItemsSource = phonesTable.DefaultView; >catch(Exception ex) < MessageBox.Show(ex.Message); >finally < if(connection!=null) connection.Close(); >> private void UpdateDB() < SqlCommandBuilder comandbuilder = new SqlCommandBuilder(adapter); adapter.Update(phonesTable); >private void updateButton_Click(object sender, RoutedEventArgs e) < UpdateDB(); >private void deleteButton_Click(object sender, RoutedEventArgs e) < if (phonesGrid.SelectedItems != null) < for (int i = 0; i < phonesGrid.SelectedItems.Count; i++) < DataRowView datarowView = phonesGrid.SelectedItems[i] as DataRowView; if (datarowView != null) < DataRow dataRow = (DataRow)datarowView.Row; dataRow.Delete(); >> > UpdateDB(); > > >
Вся работа с бд производится стандартными средствами ADO.NET и прежде всего классом SqlDataAdapter. Вначале мы получаем в конструкторе строку подключения, которая определена выше в файле app.config:
connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
Чтобы задействовать эту функциональность, нам надо добавить в проект библиотеку System.Configuration.dll .
Далее в обработчике загрузки окна Window_Loaded создаем объект SqlDataAdapter:
adapter = new SqlDataAdapter(command);
В качестве команды для добавления объекта устанавливаем ссылку на хранимую процедуру:
adapter.InsertCommand = new SqlCommand("sp_InsertPhone", connection);
Получаем данные из БД и осуществляем привязку:
adapter.Fill(phonesTable); phonesGrid.ItemsSource = phonesTable.DefaultView;
За обновление отвечает метод UpdateDB() :
private void UpdateDB()
Чтобы обновить данные через SqlDataAdapter, нам нужна команда обновления, которую можно получить с помощью объекта SqlCommandBuilder. Для самого обновления вызывается метод adapter.Update() .
Причем не важно, что мы делаем в программе — добавляем, редактируем или удаляем строки. Метод adapter.Update сделает все необходимые действия. Дело в том, что при загрузке данных в объект DataTable система отслеживает состояние загруженных строк. В методе adapter.Update() состояние строк используется для генерации нужных выражений языка SQL, чтобы выполнить обновление базы данных. Более подробно про обновление с помощью адаптеров данных можно почитать здесь: Обновление БД из DataSet вручную
В обработчике кнопки обновления просто вызывается этот метод UpdateDB, а в обработчике кнопки удаления предварительно удаляются все выделенные строки.
Таким образом, мы можем вводить в DataGrid новые данные, редактировать там же уже существующие, сделать множество изменений, и после этого нажать на кнопку обновления, и все эти изменения синхронизируются с базой данных.
Причем важно отметить действие хранимой процедуры — при добавлении нового объекта данные уходят на сервер, и процедура возвращает нам id добавленной записи. Этот id играет большую роль при генерации нужного sql-выражения, если мы захотим эту запись изменить или удалить. И если бы не хранимая процедура, то нам пришлось бы после добавления данных загружать заново всю таблицу в datagrid, только чтобы у новой добавленной записи был в datagrid id. И хранимая процедура избавляет нас от этой работы.
Также здесь мы могли бы выполнять обновление данных сразу после редактирования строки. Для этого нужно задействовать событие RowEditEnding элемента DataGrid:
public MainWindow() < InitializeComponent(); connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; phonesGrid.RowEditEnding += PhonesGrid_RowEditEnding; >private void PhonesGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
И если после окончания редактирования мы нажмем на Enter, то срабатает обработчик события RowEditEnding, который обновит базу данных.
Итак, здесь рассмотрен простейший способ работы с базой данных в WPF. Далее мы рассмотрим еще один способ, который подразумевает применение технологии Entity Framework.
Подключение и работа с БД MySQL в WPF
есть БД,созданная в MySQL с таблицей Товары и полями: название,стоимость,фото,поставщик,габариты и т.д. работаю с WPF. нужно загрузить в listBox название и картинку товара,а по щелчку выводить остальную информацию о нем. создал подключение,поместил таблицу в dataTable,как быть дальше(ItemsSource dataTable же не присвоишь)? или есть какой-то более действенный способ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
public MainWindow() { InitializeComponent(); string cp = "server=localhost;user=root;database=shop"; connection = new MySqlConnection(cp); try { connection.Open(); } catch (MySqlException mse) { MessageBox.Show("Ошибка подключения к базе данных.", mse.Message); return; } this.dataAdapter.SelectCommand = this.command; this.dataAdapter.TableMappings.AddRange(new DataTableMapping[] { new DataTableMapping("Goods", "Goods", new DataColumnMapping[] { new DataColumnMapping("name", "name") //дальше не стал создавать поля, чтобы не тратить время, а лучше спросить }) }); this.command.CommandText = "select name from goods"; this.command.Connection = this.connection; }
1 2 3 4 5 6 7 8 9 10
x:Name="bList" Grid.Row="0" Grid.Column="0"> > > > Width="100" Height="75" Source="" /> FontSize="16" Text="" HorizontalAlignment="Center" /> > > > >
#3 — Подключение MySQL и создание базы данных

Чтобы работать с базой данных к ней изначально необходимо подключиться. В уроке вы создадите базу данных MySQL, а также выполните подключение к ней при помощи специальных C# классов и MySQL коннектора.
Видеоурок
Полезные ссылки:
- MySQL C# Connector ;
- Локальный сервер Mamp ;
- Локальный сервер OpenServer ;
- Локальный сервер XAMPP ;
Подключение к БД
Для работы с базой данных MySQL необходимо установить специальный коннектор. Его нужно скачать на официальном сайте MySQL и далее выполнить его установку.
После установки MySQL выполните установку локального сервера и подключитесь к графическому редактору PhpMyAdmin. Для локального сервера можете использовать любую подходящую программу.
Создание БД
Создание базы данных происходит внутри PhpMyAdmin. Вам необходимо создать БД, заполнить её таблица и уже внутрь самих таблиц записать значения.
Базу данных можно представить как иерархическую модель данных на вашей ОС:

В БД главным объектом является сама база данных, внутри которой может находиться множество таблиц, внутри которых находятся определенные записи.
Весь код будет доступен после подписки на проект!
WPF — система «Авторизации и Регистрации»
Windows Presentation Foundation — один из компонентов ядра .NET Framework, который позволяет разработчикам создавать богатые, различные Windows приложения.
Как сделать Авторизацию в WPF приложении?
Для того чтобы разработать систему «Авторизации и регистрации» в приложении WPF, для начала нужно, создать страницы, на которых будет происходить регистрация и авторизация. Создаётся начальное окно, через которое происходит общение между всеми страницами.

На данном окне нет ничего, кроме компонента «Frame», который был добавлен из «Панели элементов» и имеет следующие свойства: имя компонента – frame, ширина и высота компонента растянута на всю ширину и высоту окна.
«Frame» позволяет открывать страницы, в области которую он занимает. Теперь перейдём к коду данного окна.

Здесь используются две сторонние функции, разработка которых указана в пунктах «Подключение к базе данных» и «Открытие страниц».
Создание страницы «Авторизация»

Данная страница имеет:
- два компонента «Label» (текст). Данные поля нужны для отображения надписей на рабочей форме, в данном случае «Введите логин» и «Введите пароль»;
- компонент «TextBox» (поле ввода текста) с наименованием «textBox_login». Позволяет вносить текст в специальное поле ввода, необходим для указания логина пользователя;
- компонент «PasswordBox» (поле ввода текста скрывающие введённый текст) с наименованием «password». Данное поле, позволяет вносить текст в специальное поле для ввода, скрывая введённый текст специальным символом;
- два компонента «Button» (кнопки) с прикреплёнными функциями. Компонент типа «Button» предназначены для создания кнопок на форме, которые в свою очередь способны обрабатывать большое количество событий.
При создании страницы будет сгенерирован следующий код:

Здесь представлены две функции, и переменная, которая содержит ссылку на первоначальную форму. В функции входа (при нажатии на кнопку «Войти») пропишем алгоритм авторизации:
// функция входа private void enter_Click(object sender, RoutedEventArgs e) < if (textBox_login.Text.Length >0) // проверяем введён ли логин < if (password.Password.Length >0) // проверяем введён ли пароль < // ищем в базе данных пользователя с такими данными DataTable dt_user = mainWindow.Select("SELECT * FROM [dbo].[users] WHERE [login] = '" + textBox_login.Text + "' AND [password] = '" + password.Password + "'"); if (dt_user.Rows.Count >0) // если такая запись существует < MessageBox.Show("Пользователь авторизовался"); // говорим, что авторизовался >else MessageBox.Show("Пользователя не найден"); // выводим ошибку > else MessageBox.Show("Введите пароль"); // выводим ошибку > else MessageBox.Show("Введите логин"); // выводим ошибку >
Алгоритм имеет следующий порядок действий:

- выполняется проверка заполняемости всех полей;
- выполняется проверка существование записи в БД;
- если запись существует, пользователь авторизуется, будет выведено всплывающее окно.
Для функции, которая открывает страницу регистрации, прописывается следующий код:
// функция открытия регистрации private void regin_Click(object sender, RoutedEventArgs e)
На этом код для страницы «Авторизация» завершён.
Как сделать Регистрацию в WPF приложении?
Рассмотрим создание страницы «Регистрация».

- три компонента «Label» (тест);
- компонент «TextBox» (поле для ввода текста) с наименованием «textBox_login»;
- два компонента «PasswordBox» (поле для ввода пароля) с наименованием «password» и «password_Copy»
- два компонента «Button» (кнопка) с прикреплёнными на них функциями.
Код страницы «Регистрация»

В функции возвращения при нажатии кнопки «Отмена», прописывается следующий код:
mainWindow.OpenPage(MainWindow.pages.login);
В коде функции, которая вызывается при регистрации сначала выполняется проверка на заполняемость полей.
if (textBox_login.Text.Length >; 0) // проверяем логин < if (password.Password.Length >; 0) // проверяем пароль < if (password_Copy.Password.Length >; 0) // проверяем второй пароль < >else MessageBox.Show("Повторите пароль"); >else MessageBox.Show("Укажите пароль"); >else MessageBox.Show("Укажите логин");
Далее проверка, на соответствие логина следующей форме записи:
string[] dataLogin = textBox_login.Text.Split('@'); // делим строку на две части if (dataLogin.Length == 2) // проверяем если у нас две части < string[] data2Login = dataLogin[1].Split('.'); // делим вторую часть ещё на две части if (data2Login.Length == 2) < >else MessageBox.Show("Укажите логин в форме х@x.x"); >else MessageBox.Show("Укажите логин в форме х@x.x");
Также стоит проверить, соответствует ли пароль заданным требованиям:
- должно быть 6 или более символов;
- допускается только английская раскладка;
- должен присутствовать один из следующих символов: «_», «-», «!»
- должна быть цифра.
Этим проверкам соответствует код:
if (password.Password.Length >;= 6) < bool en = true; // английская раскладка bool symbol = false; // символ bool number = false; // цифра for(int i=0; i;= 'А' && password.Password[i] ;= '0' && password.Password[i] if (!en) MessageBox.Show("Доступна только английская раскладка"); // выводим сообщение else if (!symbol) MessageBox.Show("Добавьте один из следующих символов: _ - !"); // выводим сообщение else if (!number) MessageBox.Show("Добавьте хотя бы одну цифру"); // выводим сообщение if(en && symbol && number) // проверяем соответствие < >>else MessageBox.Show("пароль слишком короткий, минимум 6 символов");
Проверка на совпадение паролей:
if (password.Password == password_Copy.Password) // проверка на совпадение паролей < MessageBox.Show("Пользователь зарегистрирован"); >else MessageBox.Show("Пароли не совподают");
При успешном выполнении вышеперечисленных пунктов, можно запустить приложение, где в качестве тестовых данных используются два пароля: qwerty123 (Рисунок 8) и qwerty_123 (Рисунок 9).


После этого, необходимо занести запись в базу данных, которая описана в пункте «Выполнение запросов» .
Таким образом можно реализовать систему «Авторизации и регистрации» в WPF приложении.
Автор статьи: Александр Каримов.