Пошаговое руководство. Отображение данных из базы данных SQL Server в элементе управления DataGrid
В этом пошаговом руководстве выполняется получение данных из базы данных SQL Server и их отображение в элементе управления DataGrid. С помощью ADO.NET Entity Framework можно создавать классы сущностей, представляющих данные, и использовать LINQ для записи запроса, который выполняет получение указанных данных из класса сущности.
Необходимые компоненты
Для выполнения этого пошагового руководства требуются следующие компоненты:
- Visual Studio.
- Доступ к запущенному экземпляру SQL Server или SQL Server Express с подключенной учебной базой данных AdventureWorks. Базу данных AdventureWorks можно загрузить из GitHub.
Создание новых классов сущностей
- Создайте проект приложения WPF на Visual Basic или C# с именем DataGridSQLExample .
- В обозревателе решений щелкните проект правой кнопкой мыши, выберите сначала Добавить, а затем Новый элемент. Откроется диалоговое окно Добавление нового элемента.
- В области «Установленные шаблоны» выберите Данные и в списке шаблонов выберите ADO.NET EDM (модель данных с использованием сущностей).

- Назовите файл AdventureWorksModel.edmx , а затем щелкните Добавить. Появится мастер модели EDM.
- На экране «Выбор содержимого модели» выберите Конструктор EF из базы данных, а затем нажмите кнопку Далее.
- На экране «Выбор подключения к данным» укажите подключение к базе данных AdventureWorksLT2008. Дополнительные сведения см. в статье Диалоговое окно «Выбор подключения к данным». Проверьте, чтобы имя было AdventureWorksLT2008Entities и чтобы был установлен флажок у параметра Сохранить параметры соединения сущности в App.Config как:, после чего нажмите Далее.
- На экране «Выбор объектов базы данных» разверните узел «Таблицы» и выберите таблицы Product и ProductCategory. Вы можете создавать классы сущностей для всех таблиц; однако в этом примере данные извлекаются только из этих двух таблиц.

- Нажмите кнопку Готово. Сущности Product и ProductCategory отображаются в конструкторе сущностей.

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

Примечание. Если используется 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

См. также
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Как подключить базу MySQL Workbench к C#?
Как подключить базу в Visual C# через MySQL Workbench, там надо указать имя сервера, его надо создать в MySQL Workbench и тогда он появится в выборе в Visual Studio?
- Вопрос задан более трёх лет назад
- 2839 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 2

Dimonchik @dimonchik2013
non progredi est regredi
#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.