Как подключить wpf к mysql workbench
Перейти к содержимому

Как подключить 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.

Не могу подключиться к удаленной базе данных Workbench C#

Не могу подключиться к удаленному серверу с бд worbench в WPF приложении. Думаю проблема в строке запроса, пытался искать какую нужно писать для wb, но так ничего толком и не нашел кроме советов «поищи в интернете». Прошу вас помочь с моей проблемой. Что не так в моем коде и как его можно починить? Вот код:

using System.Data; using System.Data.SqlClient; using System.Windows; internal class DataBase < SqlConnection sqlConnection = new SqlConnection($"server = cfif31.ru; user=pavel;database=name;password=password;"); public void openConnetction() < if (sqlConnection.State == ConnectionState.Closed) < sqlConnection.Open(); >> public void CloseConnetction() < if (sqlConnection.State == ConnectionState.Open) < sqlConnection.Close(); >else < MessageBox.Show("Подключение не удалось. Возможно у вас не включена база данных."); >> public SqlConnection getConnection() < return sqlConnection; >> 

Возникает ошибка «не получается подключиться к бд».
Отслеживать
задан 29 фев в 19:08
1 1 1 бронзовый знак

Вы используете System.Data.SqlClient.SqlConnection — класс для работы с Sql Server. А в метках у вас mysql .

29 фев в 19:42
в каких метах ?
29 фев в 19:50

метках, тегах, под вопросом, который вы ими пометили mysql-workbench, это не MSSQL. Какой именно типа базы данных?

Как подключить базу MySQL Workbench к C#?

Как подключить базу в Visual C# через MySQL Workbench, там надо указать имя сервера, его надо создать в MySQL Workbench и тогда он появится в выборе в Visual Studio?

  • Вопрос задан более трёх лет назад
  • 2967 просмотров

Комментировать

Решения вопроса 0

Ответы на вопрос 2

dimonchik2013

Dimonchik @dimonchik2013

non progredi est regredi

How to connect to MYSQL with WPF?

I know, it’s been asked before. But there’s a very simple way of doing this in WinForms using the MySQL Connector thing from the mysql site. Can I use this with WPF aswell? Or is it just a WinForms thing? I’ve tried it, but doesn’t seem to work. How can I connect to MYSQL with WPF?

asked Feb 4, 2011 at 12:36
anon271334 anon271334

And if it makes a difference, preferably also the ability to do queries with Linq (although not a requirement)

– anon271334
Feb 4, 2011 at 12:37

2 Answers 2

WPF and MySQL have absolutely nothing to do with each other, and can be used together as much as you like. How you implement this is a choice, but going for a separate Data-layer is always a good option. If you create an interface for the data operations, for example

public interface MyPersonRepository

you can implement this interface how you want to, and use the MySQL connector or Entity Framework or even NHibernate to access the data. This way WPF doesn’t know what database is used, which it really doesn’t need to know in the first place.

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

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