Перейти к содержимому

Как подключить wpf к mysql workbench

  • автор:

Как подключить 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 и создание базы данных

#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, для начала нужно, создать страницы, на которых будет происходить регистрация и авторизация. Создаётся начальное окно, через которое происходит общение между всеми страницами.

WPF - Главное окно

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

«Frame» позволяет открывать страницы, в области которую он занимает. Теперь перейдём к коду данного окна.

WPF - Код главной страницы

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

Создание страницы «Авторизация»

WPF - Страница авторизации

Данная страница имеет:

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

При создании страницы будет сгенерирован следующий код:

WPF - Код авторизации

Здесь представлены две функции, и переменная, которая содержит ссылку на первоначальную форму. В функции входа (при нажатии на кнопку «Войти») пропишем алгоритм авторизации:

// функция входа 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("Введите логин"); // выводим ошибку >

Алгоритм имеет следующий порядок действий:

WPF - Проверка авторизации

  • выполняется проверка заполняемости всех полей;
  • выполняется проверка существование записи в БД;
  • если запись существует, пользователь авторизуется, будет выведено всплывающее окно.

Для функции, которая открывает страницу регистрации, прописывается следующий код:

// функция открытия регистрации private void regin_Click(object sender, RoutedEventArgs e)

На этом код для страницы «Авторизация» завершён.

Как сделать Регистрацию в WPF приложении?

Рассмотрим создание страницы «Регистрация».

WPF - Страница регистрации

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

WPF - Код регистрации

В функции возвращения при нажатии кнопки «Отмена», прописывается следующий код:

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 - Проблемы с паролемWPF - Пароль принят

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

Таким образом можно реализовать систему «Авторизации и регистрации» в WPF приложении.

Автор статьи: Александр Каримов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *