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

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

  • автор:

Пошаговое руководство. Отображение данных из базы данных SQL Server в элементе управления DataGrid

В этом пошаговом руководстве выполняется получение данных из базы данных SQL Server и их отображение в элементе управления DataGrid. С помощью ADO.NET Entity Framework можно создавать классы сущностей, представляющих данные, и использовать LINQ для записи запроса, который выполняет получение указанных данных из класса сущности.

Необходимые компоненты

Для выполнения этого пошагового руководства требуются следующие компоненты:

  • Visual Studio.
  • Доступ к запущенному экземпляру SQL Server или SQL Server Express с подключенной учебной базой данных AdventureWorks. Базу данных AdventureWorks можно загрузить из GitHub.

Создание новых классов сущностей

  1. Создайте проект приложения WPF на Visual Basic или C# с именем DataGridSQLExample .
  2. В обозревателе решений щелкните проект правой кнопкой мыши, выберите сначала Добавить, а затем Новый элемент. Откроется диалоговое окно Добавление нового элемента.
  3. В области «Установленные шаблоны» выберите Данные и в списке шаблонов выберите ADO.NET EDM (модель данных с использованием сущностей). ADO.NET Entity Data Model item template
  4. Назовите файл AdventureWorksModel.edmx , а затем щелкните Добавить. Появится мастер модели EDM.
  5. На экране «Выбор содержимого модели» выберите Конструктор EF из базы данных, а затем нажмите кнопку Далее.
  6. На экране «Выбор подключения к данным» укажите подключение к базе данных AdventureWorksLT2008. Дополнительные сведения см. в статье Диалоговое окно «Выбор подключения к данным». Проверьте, чтобы имя было AdventureWorksLT2008Entities и чтобы был установлен флажок у параметра Сохранить параметры соединения сущности в App.Config как:, после чего нажмите Далее.
  7. На экране «Выбор объектов базы данных» разверните узел «Таблицы» и выберите таблицы Product и ProductCategory. Вы можете создавать классы сущностей для всех таблиц; однако в этом примере данные извлекаются только из этих двух таблиц. Select Product and ProductCategory from tables
  8. Нажмите кнопку Готово. Сущности Product и ProductCategory отображаются в конструкторе сущностей. Product and ProductCategory entity models

Получение и представление данных

  1. Откройте файл MainWindow.xaml.
  2. Задайте для свойства Width элемента Window значение 450.
  3. В редакторе XAML добавьте следующий тег DataGrid между тегами и , чтобы добавить элемент DataGrid с именем dataGrid1 .

Window with DataGrid

  • Выберите Window.
  • С помощью меню свойств окна или редактора XAML создайте для элемента Window с именем Window_Loaded обработчик событий для события Loaded. Дополнительные сведения см. в разделе Практическое руководство. Создание простого обработчика событий. Ниже показан код XAML для файла MainWindow.xaml.

    Примечание. Если используется Visual Basic, в первой строке MainWindow.xaml замените x:Class=»DataGridSQLExample.MainWindow» на x:Class=»MainWindow» .

    using System.Data.Entity.Core.Objects; using System.Linq; using System.Windows; namespace DataGridSQLExample < /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window < AdventureWorksLT2008Entities dataEntities = new AdventureWorksLT2008Entities(); public MainWindow() < InitializeComponent(); >private void Window_Loaded(object sender, RoutedEventArgs e) < var query = from product in dataEntities.Products where product.Color == "Red" orderby product.ListPrice select new < product.Name, product.Color, CategoryName = product.ProductCategory.Name, product.ListPrice >; dataGrid1.ItemsSource = query.ToList(); > > > 
    Imports System.Data.Objects Class MainWindow Dim dataEntities As AdventureWorksLT2008Entities = New AdventureWorksLT2008Entities Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded Dim products As ObjectQuery(Of Product) = dataEntities.Products Dim query = _ From product In products _ Where product.Color = "Red" _ Order By product.ListPrice _ Select product.Name, product.Color, CategoryName = product.ProductCategory.Name, product.ListPrice dataGrid1.ItemsSource = query.ToList() End Sub End Class 

    DataGrid with data from SQL database

  • Запустите пример. Должен отображаться элемент DataGrid с данными.
  • См. также

    Совместная работа с нами на GitHub

    Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

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

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

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

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

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

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

    dimonchik2013

    Dimonchik @dimonchik2013

    non progredi est regredi

    #3 — Подключение MySQL и создание базы данных

    #3 - Подключение MySQL и создание базы данных

    Чтобы работать с базой данных к ней изначально необходимо подключиться. В уроке вы создадите базу данных MySQL, а также выполните подключение к ней при помощи специальных C# классов и MySQL коннектора.

    Видеоурок

    Полезные ссылки:

    • MySQL C# Connector ;
    • Локальный сервер Mamp ;
    • Локальный сервер OpenServer ;
    • Локальный сервер XAMPP ;

    Подключение к БД

    Для работы с базой данных MySQL необходимо установить специальный коннектор. Его нужно скачать на официальном сайте MySQL и далее выполнить его установку.

    После установки MySQL выполните установку локального сервера и подключитесь к графическому редактору PhpMyAdmin. Для локального сервера можете использовать любую подходящую программу.

    Создание БД

    Создание базы данных происходит внутри PhpMyAdmin. Вам необходимо создать БД, заполнить её таблица и уже внутрь самих таблиц записать значения.

    Базу данных можно представить как иерархическую модель данных на вашей ОС:

    В БД главным объектом является сама база данных, внутри которой может находиться множество таблиц, внутри которых находятся определенные записи.

    Весь код будет доступен после подписки на проект!

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

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

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