Как подключить бд к windows forms
Перейти к содержимому

Как подключить бд к windows forms

  • автор:

Как подключить бд к windows forms

Данное руководство устарело. Актуальное руководство: по ADO.NET и работе с базами данных в .NET 6

Последнее обновление: 31.10.2015

Ранее мы рассмотрели, как удобно загружать данные в приложении Windows Forms в элемент DataGridView через DataSet. Теперь определим полнофункциональную форму, через которую мы сможем производить все стандартные CRUD операции в базе данных.

Итак, определим форму, на которой будет элемент DataGridView и три кнопки для добавления, удаления и сохранения изменений. Форма в итоге будет выглядеть примерно следующим образом:

DataSet и DataGridView

Код формы будет выглядеть следующим образом:

using System; using System.Data; using System.Windows.Forms; using System.Data.SqlClient; namespace AdoNetWinFormsApp < public partial class Form1 : Form < DataSet ds; SqlDataAdapter adapter; SqlCommandBuilder commandBuilder; string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True"; string sql = "SELECT * FROM Users"; public Form1() < InitializeComponent(); dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridView1.AllowUserToAddRows = false; using (SqlConnection connection = new SqlConnection(connectionString)) < connection.Open(); adapter = new SqlDataAdapter(sql, connection); ds = new DataSet(); adapter.Fill(ds); dataGridView1.DataSource = ds.Tables[0]; // делаем недоступным столбец id для изменения dataGridView1.Columns["Id"].ReadOnly = true; >> // кнопка добавления private void addButton_Click(object sender, EventArgs e) < DataRow row = ds.Tables[0].NewRow(); // добавляем новую строку в DataTable ds.Tables[0].Rows.Add(row); >// кнопка удаления private void deleteButton_Click(object sender, EventArgs e) < // удаляем выделенные строки из dataGridView1 foreach(DataGridViewRow row in dataGridView1.SelectedRows) < dataGridView1.Rows.Remove(row); >> // кнопка сохранения private void saveButton_Click(object sender, EventArgs e) < using (SqlConnection connection = new SqlConnection(connectionString)) < connection.Open(); adapter = new SqlDataAdapter(sql, connection); commandBuilder = new SqlCommandBuilder(adapter); adapter.InsertCommand = new SqlCommand("sp_CreateUser", connection); adapter.InsertCommand.CommandType = CommandType.StoredProcedure; adapter.InsertCommand.Parameters.Add(new SqlParameter("@name", SqlDbType.NVarChar, 50, "Name")); adapter.InsertCommand.Parameters.Add(new SqlParameter("@age", SqlDbType.Int, 0, "Age")); SqlParameter parameter = adapter.InsertCommand.Parameters.Add("@Id", SqlDbType.Int, 0, "Id"); parameter.Direction = ParameterDirection.Output; adapter.Update(ds); >> > >

Здесь для добавления объекта мы будем обращаться к хранимой процедуре sp_CreateUser, которая была добавлена в базу данных в прошлой теме.

В конструкторе данные загружаются в DataSet, первая таблица которого устанавливается в качестве источника данных для dataGridView1:

dataGridView1.DataSource = ds.Tables[0];

Также в конструкторе устанавливается полное выделение строки и запрет на ручное добавление новых строк:

dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridView1.AllowUserToAddRows = false;

В обработчике кнопки добавления создается новая строка, которая добавляется в таблицу объекта DataSet. И так как мы ранее установили привязку к источнику данных, то автоматически новая строка также будет добавляться и в dataGridView1:

private void addButton_Click(object sender, EventArgs e) < DataRow row = ds.Tables[0].NewRow(); // добавляем новую строку в DataTable ds.Tables[0].Rows.Add(row); >

В обработчике кнопки удаления удаляются выделенные строки в dataGridView1. Опять же в силу привязки к источнику данных будет также происходить удаление и из таблицы в DataSet:

private void deleteButton_Click(object sender, EventArgs e) < foreach(DataGridViewRow row in dataGridView1.SelectedRows) < dataGridView1.Rows.Remove(row); >>

Для обновления на не нужна никакая кнопка, так как мы можем нажать на любую ячейку таблицы (кроме заблокированного для изменения столбца Id) и изменить в ней данные. Однако сами по себе добавление новой строки, удаление строк, изменение ячеек ни как автоматически не отразятся на базе данных. И чтобы бд синхронизировалась, пользователю надо будет нажать на кнопку сохранения, обработчик которой выглядит следующим образом:

private void saveButton_Click(object sender, EventArgs e) < using (SqlConnection connection = new SqlConnection(connectionString)) < connection.Open(); adapter = new SqlDataAdapter(sql, connection); commandBuilder = new SqlCommandBuilder(adapter); adapter.InsertCommand = new SqlCommand("sp_CreateUser", connection); adapter.InsertCommand.CommandType = CommandType.StoredProcedure; adapter.InsertCommand.Parameters.Add(new SqlParameter("@name", SqlDbType.NVarChar, 50, "Name")); adapter.InsertCommand.Parameters.Add(new SqlParameter("@age", SqlDbType.Int, 0, "Age")); SqlParameter parameter = adapter.InsertCommand.Parameters.Add("@Id", SqlDbType.Int, 0, "Id"); parameter.Direction = ParameterDirection.Output; adapter.Update(ds); >>

Как в прошлой теме здесь устанавливается у адаптера команда на добавление InsertCommand и затем вызывается метод Update() . В итоге мы можем добавить несколько строк, удалить, изменить, и потом один раз мы нажмем на кнопку, и все изменения будут применены к базе данных.

Подключение базы данных к Windows Forms

Базы данных и Windows Forms
Полный нуб в .net Вообщем есть 2 формы Вход в личный кабинет и сам личный кабинет Кусок кода из.

Создать программу на Windows Forms с использованием базы данных
Прошу прощения, если эта тема уже обсуждалась, но я уже просто не знаю что делать:( Помогите.

Подключение dll (.NET) к проекту Windows Forms
Приветствую! Пытаюсь подключить библиотеку dll, которую сам же создал: // #include.

Диалоговое окно подключение к Access из Windows Forms
Подскажите пожалуйста! Как создать такую форму? C# Windows Forms + Access (.accdb) После.

Приложение на C# + связка с MySQL базой данных

Привет всем кодерам! В этом мини-туториале мы с вами с нуля напишем десктопное приложение на С#, которое будет работать с базой данных. Это задание было дано учебной программой 11 класса НИШ ФМН г.Алматы.

Что мы будем для этого использовать?

  • Среда программирования: Visual Studio 2017 (версия не имеет никакого значения)
  • Языки: C# — для клиентской части приложения, MySQL — для работы с данными в базе данных нашего приложения

Что будет выполнять приложение?

Наше приложение будет добавлять, изменять, обновлять, удалять и запрашивать данные из базы данных каратистов. «А почему каратистов?» — спросите вы. Так потому что это самая родная для меня тема, вот и будем рассматривать данный пример.

Создание проекта

После того, как вы скачали Visual Studio себе на компьютер, вам следует создать проект.

Как это сделать?

Создать проект -> Visual C# -> Приложение Windows Forms -> *Выбираем название для проекта и его расположение* -> OK

Теперь у вас готов проект и можно приступать к работе!

Создание форм (Часть 1)

Теперь нам нужно создать графический интерфейс приложения через формы. Добавлять новые формы легко. Просто нажимаете правой кнопкой мыши на свой проект и выбираете «Добавить», как на скриншоте ниже:

Далее следует поработать над дизайном наших форм. Не будем сильно изощряться и сделаем максимально минималистичный дизайн:

Главное меню

Меню выбора

Меню выбора для редактирования

Форма для добавления нового пользователя

Так-с. Дальше пока что мы не пойдём, так как для начала нам нужно понять как всё будет работать. У нас есть форма для добавления каратиста, и нам еще нужны формы для создания запросов, для просмотра базы данных и для редактирования её. Но где сама база данных?

Её нет. Поэтому нам нужно немедленно её создать!

Создание базы данных

Переходим во вкладку «Средства» и выбираем «Подключиться к базе данных». Далее открывается окно «Добавить подключение», где в поле «Источник данных» мы выбираем «Файл базы данных Microsoft SQL Server (SqlClient)«. Даём любое название файлу базы данных, в нашем случае — «IOGKF_members». Далее нажимаем кнопку «ОК» и в левой стороне экрана видим, как у нас добавилась новая база данных.

Раскрываем директорию с нашей базой данных и видим самую первую папку «Таблицы» — она нас и интересует. Жмём по ней правой кнопкой мыши и нажимаем «Добавить новую таблицу».

Можно создать таблицу двумя путями: 1) Конструктором 2) Через SQL код

Если вам лень делать её самим, то скопируйте следующий SQL код и вставьте его в поле с кодом у таблицы:

CREATE TABLE [dbo].[Members] ( [member_id] INT NOT NULL, [last_name] VARCHAR (20) NULL, [first_name] VARCHAR (20) NULL, [age] INT NULL, [rank] VARCHAR (3) NULL, [rank_value] INT NULL, [sensei] VARCHAR (20) NULL, [dojo] VARCHAR (20) NULL, PRIMARY KEY CLUSTERED ([member_id] ASC) );

Коротко о типах данных в SQL

  • varchar — тот же самый String, то есть строка (в скобках пишем её максимальную длину)
  • int — целые числа
  • binary — тот же самый boolean, то есть True or False, только в SQL — это 1 и 0 соответственно

null — указываем может ли переменная быть пустой, то есть не содержать информации

primary key — первичный ключ, в данном случае это member_id. Таким образом, все значения member_id уникальны

После того как вы создали таблицу, нужно её сохранить. Нажмите ctrl + s или просто закройте файл с таблицей после чего у вас появится сообщение о сохранении таблицы.

Ок, теперь у нас есть база данных и таблица, где будет храниться информация о каратистах.

Создание форм (Часть 2) + код

Давайте напишем программный код для добавления каратистов в нашу базу данных. В моём проекте эта форма называется Form5 (у неё надпись «Add User» в предыдущих скриншотах). В классе этой формы пишем следующее:

public string conString = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\HP\\Desktop\\IOGKF\\IOGKF\\IOGKF_members.mdf;Integrated Security=True;Connect Timeout=30";

Здесь мы создали строковую переменную conString и присвоили ей значение строки подключения базы данных. Чтобы посмотреть вашу строку подключения нажмите правой кнопкой мыши по базе данных и выберите «Свойства»:

Теперь два раза нажимаем на кнопку «Add» в конструкторе нашей формы и таким образом открываем код, который будет выполняться при её нажатии. Вот код метода, который выполняется при нажатии:

private void button1_Click(object sender, EventArgs e) < SqlConnection con = new SqlConnection(conString); con.Open(); if(con.State == System.Data.ConnectionState.Open) < string q = "insert into Members(member_id, last_name, first_name," + " age, rank, rank_value, sensei, dojo)" + " values('" + textBox1.Text.ToString() + "','" + textBox2.Text.ToString() + "','" + textBox3.Text.ToString() + "','" + textBox4.Text.ToString() + "','" + comboBox2.Text.ToString() + "','" + comboBox1.Text.ToString() + "','" + comboBox3.Text.ToString() + "','" + textBox8.Text.ToString() + "') "; SqlCommand cmd = new SqlCommand(q, con); cmd.ExecuteNonQuery(); MessageBox.Show("Connection was successful!"); >con.Close(); >

Мы создаём объект con типа SqlConnection и если наша база данных подключена к приложению у нас будет выполняться код находящийся под блоком if. Там у нас сохранена SQL команда в строке q, которая позже передаётся в объект cmd типа SqlCommand, который позже выполняет функцию ExecuteNonQuery, которая выполняет данный SQL запрос. После при успешном выполнении в приложении выведется сообщение об успешном добавлении каратиста. Всё достаточно просто!

Кстати, как работают кнопки навигации в приложении, то есть для перехода между формами?

Вот держите пример кода, по этому шаблону они все и работают:

private void button3_Click(object sender, EventArgs e)

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

Чтобы ��рийти к такому результату нам нужно добавить в нашу форму DataGridView, объект, который будет отображать таблицу. Сделать это очень просто, на скриншоте это видно:

В классе этой формы пишем следующее:

SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\HP\\Desktop\\IOGKF\\IOGKF\\IOGKF_members.mdf;Integrated Security=True;Connect Timeout=30"); SqlCommand cmd; SqlDataAdapter adapt;

Что-то наподобии этой строчки у вас должно появиться автоматически в Load методе класса вашей формы:

this.membersTableAdapter.Fill(this.iOGKF_membersDataSet.Members);

Она заполняет DataGridView данными из таблицы. Теперь в этот же метод Load добавляем эти строчки кода. С помощью них база данных будет постоянно обновляться внешне:

con.Open(); DataTable dt = new DataTable(); adapt = new SqlDataAdapter("select * from Members", con); adapt.Fill(dt); dataGridView1.DataSource = dt; con.Close();

А как сделать так, чтобы каратисты показывались по определённым критериям? Здесь нам нужно делать уже SQL запрос, но о них информация будет чуть позже на канале. Создаём новую форму, добавляем DataGridView и несколько текстовых полей. Кто шарит в SQL, тот поймёт в чем смысл этой формы:

Пишем код в метод, который будет выполняться при нажатии на кнопку «Show»:

private void button1_Click(object sender, EventArgs e)

В принципе, алгоритм здесь тот же самый, но мы уже создаем отдельный DataSet — коллекцию неупорядоченных данных, которые позже будут отображаться в DataGridView. Сам же DataSet был заполнен теми данными, которые получились от SQL запроса.

Напоследок осталось одно из самых сложных — сделать форму с редактированием базы данных. Вот, как она выглядит:

Как всегда пишем эти строчки кода в класс формы:

public string conString = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\HP\\Desktop\\IOGKF\\IOGKF\\IOGKF_members.mdf;Integrated Security=True;Connect Timeout=30"; SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\HP\\Desktop\\IOGKF\\IOGKF\\IOGKF_members.mdf;Integrated Security=True;Connect Timeout=30"); SqlCommand cmd; SqlDataAdapter adapt;

А это, как я раньше писал, для постоянного внешнего обновления базы данных в DataGridView:

private void Form7_Load(object sender, EventArgs e)

Теперь мы начнём писать код для кнопок.

Код для добавления каратистов из таблицы:

private void button1_Click(object sender, EventArgs e) < if (textBox1.Text != "" && textBox2.Text != "" && textBox3.Text != "" && textBox4.Text != "" && textBox5.Text != "" && textBox6.Text != "" && textBox7.Text != "" && textBox8.Text != "") < cmd = new SqlCommand("insert into Members(member_id,last_name,first_name,age,rank,rank_value,sensei,dojo) values(@member_id,@last_name,@first_name,@age,@rank,@rank_value,@sensei,@dojo)", con); con.Open(); cmd.Parameters.AddWithValue("@member_id", textBox1.Text); cmd.Parameters.AddWithValue("@last_name", textBox2.Text); cmd.Parameters.AddWithValue("@first_name", textBox3.Text); cmd.Parameters.AddWithValue("@age", textBox4.Text); cmd.Parameters.AddWithValue("@rank", textBox5.Text); cmd.Parameters.AddWithValue("@rank_value", textBox6.Text); cmd.Parameters.AddWithValue("@sensei", textBox7.Text); cmd.Parameters.AddWithValue("@dojo", textBox8.Text); cmd.ExecuteNonQuery(); con.Close(); MessageBox.Show("Record Inserted Successfully"); DisplayData(); ClearData(); >else < MessageBox.Show("Please Provide Details!"); >>

Код для редактирования информации о каратистах:

private void button4_Click(object sender, EventArgs e) < if (textBox1.Text != "" && textBox2.Text != "" && textBox3.Text != "" && textBox4.Text != "" && textBox5.Text != "" && textBox6.Text != "" && textBox7.Text != "" && textBox8.Text != "") < cmd = new SqlCommand("update Members set member_id=@member_id,last_name=@last_name,first_name=@first_name,age=@age,rank=@rank,rank_value=@rank_value,sensei=@sensei,dojo=@dojo where member_id=@member_id", con); con.Open(); cmd.Parameters.AddWithValue("@member_id", textBox1.Text); cmd.Parameters.AddWithValue("@last_name", textBox2.Text); cmd.Parameters.AddWithValue("@first_name", textBox3.Text); cmd.Parameters.AddWithValue("@age", textBox4.Text); cmd.Parameters.AddWithValue("@rank", textBox5.Text); cmd.Parameters.AddWithValue("@rank_value", textBox6.Text); cmd.Parameters.AddWithValue("@sensei", textBox7.Text); cmd.Parameters.AddWithValue("@dojo", textBox8.Text); cmd.ExecuteNonQuery(); MessageBox.Show("Record Updated Successfully"); con.Close(); DisplayData(); ClearData(); >else < MessageBox.Show("Please Select Record to Update"); >>

Код для удаления каратистов из базы данных:

private void button5_Click(object sender, EventArgs e) < if (textBox1.Text != null) < cmd = new SqlCommand("delete Members where member_id=@member_id", con); con.Open(); cmd.Parameters.AddWithValue("@member_id", textBox1.Text); cmd.ExecuteNonQuery(); con.Close(); MessageBox.Show("Record Deleted Successfully!"); DisplayData(); ClearData(); >else < MessageBox.Show("Please Select Record to Delete"); >>

Весь код выше работает по алгоритму, который я объяснял выше: идёт соединение с базой данных, выполняется команда, добавляются параметры в эту команду из текстовых полей и далее выводится сообщение.

Как вы заметили везде вызываются 2 метода — DisplayData и ClearData. Вот код для них:

private void DisplayData() < con.Open(); DataTable dt = new DataTable(); adapt = new SqlDataAdapter("select * from Members", con); adapt.Fill(dt); dataGridView1.DataSource = dt; con.Close(); >private void ClearData()

Также надо написать код для метода, который будет вызываться при нажатии на header в DataGridView и будет заполнять текстовые поля. Header — эта та область DataGridView, при нажатии на которую будет выделяться вся информация о каратисте, соответственно эта информация будет добавляться в соответствующие текстовые поля, для удобного редактирования. Выглядит это так:

Но прежде чем добавить этот метод, нам необходимо создать обработчик нажатий (Event Handler). Добавляем его в конструктор нашей формы:

public Form7()

А вот теперь добавляем метод:

private void OnRowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)

Вот и всё! У нас почти готовая программа, тебе надо лишь чуть доработать её и добавить мелкие детали!

Если что, я добавил этот проект к себе в GitHub, поэтому весь код можно посмотреть именно там. Только осторожно, там очень много файлов в которых можно легко запутаться. Желаю тебе удачи! 😀

Как подключить бд к windows forms

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 31.10.2015

Чтобы хранить данные, нам естественным образом нужна база данных. Как правило, в качестве базы данных используется MS SQL Server, на примере которого мы и посмотрим весь процесс создания БД и подключения к ней.

Мы можем создать базу данных прямо в проекте, либо же создать ее на сервере MS SQL. Для хранения баз данных проекте у нас предназначена папка App_Data. Для этого нажмем правой кнопкой мыши на папку App_Data и в появившемся контекстном меню выберем Add-> New Item. . В появившемся окне добавления нового элемента выберем SQL Server Database и назовем новую базу данных Bookstore.mdf:

Мы можем создать базу данных равнозначным образом и на сервере. После этого база данных добавляется в проект, и мы можем увидеть ее в папке App_Data. Теперь в обозревателе баз данных (окно Database Explorer ) мы можем подключиться к ней и создать таблицы, которые будут хранить данные.

Раскроем узел Bookstore.mdf и найдем узел Tables. Нажмем на этот узел правой кнопкой мыши и в появившемся меню выберем пункт Add New Table . И перед нами появится окно, в котором нам надо определить названия и типы столбцов новой таблицы. По соглашениям о наименованиях таблицы при работе с Entity Framework должны соответствовать имени модели. То есть, так как наша модель называется Book , то таблица будет называться Books . А Entity Framework автоматически распознает, что таблица Books соответствует классу Book .

Итак, создадим структуру таблицы:

Не забудьте установить ниже в окне Properties (в Visual Stidio 2010 — окно Column Properties) для столбца Id соответствующие параметры для первичного ключа:

После этого, если мы работаем с Visual Studio 2010, нам будет предложено просто ввести имя таблицы — введем имя Books, и затем таблица добавляется в БД.

А в Visual Studio Express 2012 for Web нам надо сгенерировать таблицу на основе заданного выше определения. Для этого нажмем на кнопку Update:

В появившемся диалоговом окне нажмем на кнопку Update Database. После этого в нашу базу данных добавляется только что сгенерированная таблица. Подобным образом определим таблицу Purchases для модели Purchase:

Добавим в таблицу Books несколько записей:

Теперь, во-первых, чтобы взаимодействовать с БД, нам нужен класс контекста данных, пусть это будет следующий класс BookContext:

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Entity; namespace BookStore.Models < public class BookContext : DbContext < public DbSetBooks < get; set; >public DbSet Purchases < get; set; >> >

Во-вторых, определим строку подключения к БД. Для этого откроем файл Web.config и добавим в конец секции configuration определение строки подключения. Однако тут надо сразу заметить, что для Visual Studio 2010 строка подключения будет отличаться от строки подключения, которая используется в Visual Studio 2012.

Итак, строка подключения для Visual Studio 2010 будет выглядеть так:

Для Visual Studio 2012 будет выглядеть определение строки подключения будет выглядеть следующим образом:

В Visual Studio 2012 в отличие от 2010-й версии мы можем использовать режим LocalDB, который предназначен прежде всего для разработчиков, представляя некоторую упрощенную версию. Поэтому в данном случае в качестве источника данных используется (LocalDB)\v11.0.

Обратите внимание, что в обоих случаях свойство name=»BookContext» должно содержать название контекста данных.

Использование подстановки |DataDirectory| позволяет опустить полный физический путь к базе данных, которая хранится в папке App_Data.

Теперь мы можем получить содержимое таблицы Books в контроллере Home:

public class HomeController : Controller < BookContext db = new BookContext(); public ActionResult Index() < return View(db.Books); >>

И вывести данные в представлении Index.cshtml:

@model IEnumerable @ < Layout = "~/Views/Shared/_Layout.cshtml"; > 

Распродажа книг

@foreach (BookStore.Models.Book b in Model) < >

Название книги

Автор

Цена

@b.Name

@b.Author

@b.Price

Купить

Закрытие подключения

Чтобы наверняка быть уверенным, что подключение к базе данных закрыто, следует вызывать метод Dispose у контекста данных:

protected override void Dispose(bool disposing)

Это переопределенная версия метода Dispose контроллера, которая вызывается при уничтожении объекта контроллера. В нее помещается вызов db.Dispose() , который уничтожает все связанные с контекстом данных ресурсы и подключения.

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

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