Работа с базами данных в c windows forms

Выборка, сохранение, обновление и удаление в базу данных MS SQL Server в графическом приложении на C#

Все операции с БД в графическом приложении

Данное руководство устарело. Актуальное руководство: по 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().
В итоге мы можем добавить несколько строк, удалить, изменить, и потом один раз мы нажмем на кнопку, и все изменения будут применены к базе данных.

Рассмотрим выполнение запросов SELECT, INSERT, UPDATE и DELETE к базе данных Microsoft Access из программы на языке C#, на примере проекта Windows Forms в Visual Studio. В конце статьи вы найдете исходники, а также видеоурок по данной теме.

Проектирование базы данных MS Access

Создадим в Microsoft Access базу данных Workers (рабочие) с одной таблицей Worker (рабочий).

Таблица содержит следующие столбцы:

  • w_id (идентификатор записи) — тип данных Счетчик;
  • w_name (имя) — тип данных Короткий текст;
  • w_position (должность) — тип данных Короткий текст;
  • w_salary (зарплата) — тип данных Числовой.

Схема базы данных MS Access для проекта на C#

Для корректной работы с базой данных MS Access с помощью языка C#, ее необходимо сохранить в формате с расширением .mdb

Сохранение БД MS Access в нужном формате для работы с ней на C#

Создание проекта Windows Forms в Visual Studio на языке C#

Создадим проект Windows Forms на C# и поместим на форму следующие компоненты:

TextBox, ListBox и пять кнопок Button.

Расположение элементов управления на форме Windows Forms для выполнения запросов к MS Access на C#

На макете формы в Visual Studio выполним двойные щелчки левой кнопкой мыши на всех кнопках, создав тем самым обработчики событий нажатия для каждой кнопки.

// обработчик события нажатия кнопки SELECT1

private void selectButton1_Click(object sender, EventArgs e)

{

}

Также в окне свойств формы с помощью двойного щелчка мыши создадим обработчик события FormClosing, выполняющегося при закрытии формы.

Обработчик события закрытия формы - в нем будем закрывать соединение с БД Access

// обработчик события закрытия формы

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

}

Файл с БД поместим в каталог binDebug в папке с проектом.

Написание кода на C# для выполнения запросов к MS Access

Добавим в класс формы строковое поле string — строку подключения к БД. В строке подключения в значении параметра Data Source указывается путь к файлу с базой данных.

// строка подключения к MS Access

// вариант 1

public static string connectString = «Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Workers.mdb;»;

// вариант 2

//public static string connectString = «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Workers.mdb;»;

Есть два варианта строки с различными провайдерами подключения. Если с первой строкой программа не будет работать — закомментируйте ее, а вторую раскомментируйте.

Далее добавим поле класса типа OleDbConnection. Экземпляр данного класса понадобится для установления соединения с базой данных MS Access.

// поле — ссылка на экземпляр класса OleDbConnection для соединения с БД

private OleDbConnection myConnection;

В конструкторе класса создадим экземпляр OleDbConnection и установим соединение с БД. Т.е. при запуске программы будет устанавливаться соединение с Access.

// конструктор класса формы

public Form1()

{

    InitializeComponent();

    // создаем экземпляр класса OleDbConnection

    myConnection = new OleDbConnection(connectString);

    // открываем соединение с БД

    myConnection.Open();

}

В обработчике события закрытия формы добавим код, закрывающий соединение с базой данных. Таким образом при выходе из программы соединение с БД будет закрываться.

// обработчик события закрытия формы

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

    // заркываем соединение с БД

    myConnection.Close();

}

Напишем в обработчик события нажатия кнопки SELECT1 код, выполняющий запрос выборки данных одного столбца одной строки. Вывод данных производится в TextBox.

// обработчик события нажатия кнопки SELECT1

private void selectButton1_Click(object sender, EventArgs e)

{

    // текст запроса

    string query = «SELECT w_name FROM Worker WHERE w_id = 1»;

    // создаем объект OleDbCommand для выполнения запроса к БД MS Access

    OleDbCommand command = new OleDbCommand(query, myConnection);

    // выполняем запрос и выводим результат в textBox1

    textBox1.Text = command.ExecuteScalar().ToString();

}

При нажатии кнопки SELECT2 будет выполняться запрос на получение многострочных данных из нескольких столбцов (по сути таблицы). Данные выводятся в ListBox.

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

// обработчик события нажатия кнопки SELECT2

private void selectButton2_Click(object sender, EventArgs e)

{

    // текст запроса

    string query = «SELECT w_name, w_position, w_salary FROM Worker ORDER BY w_salary»;

    // создаем объект OleDbCommand для выполнения запроса к БД MS Access

    OleDbCommand command = new OleDbCommand(query, myConnection);

    // получаем объект OleDbDataReader для чтения табличного результата запроса SELECT

    OleDbDataReader reader = command.ExecuteReader();

    // очищаем listBox1

    listBox1.Items.Clear();

    // в цикле построчно читаем ответ от БД

    while(reader.Read())

    {

        // выводим данные столбцов текущей строки в listBox1

        listBox1.Items.Add(reader[0].ToString() + » « + reader[1].ToString() + » « + reader[2].ToString() + » «);

    }

    // закрываем OleDbDataReader

    reader.Close();

}

Далее запрос вставки данных (INSERT) в MS Access на C#:

// обработчик события нажатия кнопки INSERT

private void insertButton_Click(object sender, EventArgs e)

{

    // текст запроса

    string query = «INSERT INTO Worker (w_name, w_position, w_salary) VALUES (‘Михаил’, ‘Водитель’, 20000)»;

    // создаем объект OleDbCommand для выполнения запроса к БД MS Access

    OleDbCommand command = new OleDbCommand(query, myConnection);

    // выполняем запрос к MS Access

    command.ExecuteNonQuery();

}

Метод ExecuteNonQuery() класса OleDbCommand выполняет запрос и возвращает целое число типа int — количество строк затронутых выполняемым запросом. Данный метод подходит для запросов вставки INSERT, обновления UPDATE и удаления DELETE. Т.е. для тех, которые не возвращают данные.

Запрос обновления данных UPDATE:

// обработчик события нажатия кнопки UPDATE

private void updateButton_Click(object sender, EventArgs e)

{

    // текст запроса

    string query = «UPDATE Worker SET w_salary = 123456 WHERE w_id = 3»;

    // создаем объект OleDbCommand для выполнения запроса к БД MS Access

    OleDbCommand command = new OleDbCommand(query, myConnection);

    // выполняем запрос к MS Access

    command.ExecuteNonQuery();

}

Пример SQL-запроса удаления данных (DELETE) из БД Access с помощью языка C#:

// обработчик события нажатия кнопки DELETE

private void deleteButton_Click(object sender, EventArgs e)

{

    // текст запроса

    string query = «DELETE FROM Worker WHERE w_id < 3»;

    // создаем объект OleDbCommand для выполнения запроса к БД MS Access

    OleDbCommand command = new OleDbCommand(query, myConnection);

    // выполняем запрос к MS Access

    command.ExecuteNonQuery();

}

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

Скачать исходник

Более подробное объяснение темы выполнения запросов из программы на C# к базе данных Microsoft Access доступно в видеоуроке, представленном ниже.

Видеоурок по теме работы с БД MS Access из программы на языке C#

Вступление

Предлагаю вашему вниманию перевод статьи Bernardo Castilho посвященный привязке данных сущностей к элементам управления WinForms. Надеюсь, вам статья также поможет в работе как и мне.

  • Скачать пример (EF4, C#) — 1.03 MB
  • Скачать пример (EF4, C#, separating data layer from the UI layer) — 120 KB
  • Скачать пример (EF4, VB, provided by Mr ‘VBForever’) — 946 KB
  • Скачать пример (EF5, C#) — 1.3 MB 
  • Скачать пример (EF6 C#) = 1.3 MB  

На сегодняшний день Winforms все еще остается платформой для многих бизнес-приложений, ориентированных на работу с данными, и привязка данных является неотъемлемой частью разработки для Winforms. Если вы использовали стандартные классы ADO.NET для работы с данными, то вы знакомы с инструментами, используемыми для создания классов DataSet и связывания этих классов во время разработки с помощью их свойств DataSource, DataMember или Binding.

Плохая новость заключается в том, что эти богатые возможности разработки не применимы к источникам данных Entity Framework. Даже простая привязка требует написания кода. Чтобы получить работающую базовую привязку, достаточно немного кода, но для получения полноценной привязки, к которой мы привыкли (такой как автоматическая сортировка, фильтрация, и иерархическое связывание), требуется существенный объем работы.

Хорошая новость заключается в том, что с помощью библиотеки EFWinForms можно легко выполнить привязку данных и создать повторно используемый компонент для привязки данных в Winforms. В библиотеке есть два компонента:

  • EntityDataSource: компонент, который инкапсулирует модель сущности данных и представляет его элементы в качестве источников данных, пригодных для связывания, с полной поддержки во время разработки.
  • EntityBindingNavigator: элемент управления, который обеспечивает навигацию для просмотра и предоставляет пользовательский интерфейса для добавления и удаления записей, сохранение или отмены изменений в базе данных.

Компонент EntityDataSource

Компонент EntityDataSource играет роль DataSet и BindingSource в стандартном ADO.NET программировании. Чтобы использовать его, сначала необходимо создать Entity Data Model.

После этого, перетащите компонент EntityDataSource на форму и свойство ObjectContextType типа ObjectContext установите в один из представленных Entity Data Model контекстов. (Если у вас EF6, используйте свойство DbContextType вместо ObjectContextType). Когда вы это сделаете, компонент EntityDataSource создает объект контекста и использует рефлексию, чтобы найти все источники данных, доступных в контексте. Эти источники данных, затем появляются в дизайнере с помощью реализации IListSource.

После этого Вы можете добавлять элементы управления на форму и связывать их с EntityDataSource с помощью их свойств DataSource, DataMember и Binding как обычно. Один EntityDataSource предоставляет доступ ко всем таблицам и представлениям в модели и сохраняет изменения только с помощью вызова метода SaveChanges.

Примеры

Лучший способ понять, как работает EntityDataSource рассмотреть несколько примеров. В следующем разделе рассказывается о том, как использовать EntityDataSource для реализации четырех типичных сценариев привязки данных. Все сценарии используют одну Entity Data Model, созданную на основе БД Northwind.

Чтобы использовать его, сначала необходимо создать Entity Data Model.

Создание Entity Data Model

Чтобы создать Entity Data Model, щелкните правой кнопкой дерево проекта в окне Solution Explorer и затем выберите “Add | New Item…”.

Появится диалоговое окно “Add New Item”. Выберите “ADO.NET Entity Data Model”, задайте имя модели и щелкните расположенную внизу формы кнопку “Add”.

Появится диалоговое окно “Entity Data Model Wizard” в котором нужно выбрать какую модель вы будете создавать: модель, сгенерированную из существующей базы данных или пустую модель. Выберите первый вариант и нажмите “Next”.

Следующий шаг-выбор базы данных для создания модели. Вы можете выбрать существующее подключение, или используя кнопку “New Connection”, создать новое. В нашем примере мы создадим подключение к базе данных SQL Server «Northwind».

Файл базы данных называется “NorthWnd.mdf и входит в состав примера. После того как вы выбрали базу данных, мастер предложит вам выбрать таблицы, представления и хранимые процедуры, которые необходимо включить в Entity Data Model. В нашем примере мы просто выберем все таблицы, как показано на рисунке ниже:

Щелкните кнопку “Finish” чтобы создать модель. В ваш проект добавятся два элемента: файл “Model1.edmx” описывающий с помощью XML концептуальную модель и связанный с ним “Model1.Designer.cs” который содержит сгенерированный код, включая ObjectContext использующийся для доступа к данным и классы сущностей, такие как Product, Employee и т.п.

Щелкните два раза на edmx-файле. Появится окно Entity Data Model Designer, в котором можно просматривать, редактировать модель, а также пересоздать ее в любой момент, если вы вдруг измените схему базы данных или если вы захотите изменить список таблиц и представлений, которые необходимо включить в модель. Все автоматически сгенерированные классы в файле «Designer.cs” объявлены как частичные. Это позволяет нам расширять их, добавлением бизнес логики в отдельные файлы, которые не будут изменены, если вы пересоздадите модель из базы данных.

Теперь вы можете использовать модель данных так, как показано ниже:

	public Form1()
	{
		InitializeComponent();
		using 
		(
		var ctx = new NORTHWNDEntities())
		{
		  dataGridView1.DataSource = ctx.Products.ToList();
		}
	}

Этот код создает объект ObjectContext, который предоставляет данные для модели, строит список, содержащий все товары (products), и показывает список в таблице. Вы можете отредактировать товары и сохранить изменения в базе данных путем вызова метода ctx.SaveChanges().

Если вы запустите код, то заметите некоторые серьезные ограничения: нельзя сортировать или фильтровать данные, нельзя добавлять или удалять элементы из списка и конечно же нельзя настроить столбцы таблицы (Grid) во время разработки с помощью редактора таблицы (Grid).

Эти ограничения обусловлены тем, что в качестве источника используется список (просто „мгновенный снимок“ данных). IBindingList, который Winforms создает автоматически, в этом случае обеспечивает лишь минимальную функциональность.

Создание Grid View (With AutoLookup)

Чтобы устранить эти недостатки, добавьте на форму компонент EntityDataSource и в окне Properties, установите его свойство ObjectContextType в “Sample.NORTHWNDEntities”, как показано на рисунке ниже (Примечание: если у вас EF6, используйте DbContextType вместо ObjectContextType):

Компонент EntityDataSource использует значение из ObjectContextType для создания контекста объекта, чтобы сгенерировать представления для всех элементов, описанных в модели данных.

Теперь добавьте элемент управления DataGridView на форму и в окне Properties, установите свойство DataSource в entityDataSource1, а свойство DataMember в Products, как показано ниже:

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

Если сейчас запустить проект, то вы увидите, что таблица заполняется автоматически, и вы можете выполнять все действия какие захотите, включая редактирование, сортировку, добавление или удаление элементов.

Все это возможно потому, что компонент EntityDataSource оборачивает список товаров в класс EntityBindingList, который реализует интерфейс IBindingListView и поддерживает сортировку, фильтрацию, добавление и удаление элементов.

Сохранение изменений

После редактирования данных, вы вероятно захотите сохранить изменения в базу данных. Для демонстрации того, как это можно сделать, добавьте на форму три кнопки и установите их свойство Text в “Save”, “Cancel”, and “Refresh” и присоедините к событиям Click этих кнопок следующие обработчики:

		// save/cancel/refresh changes in the data source
		void _btnSave_Click(object sender, EventArgs e)
		{
			entityDataSource1.SaveChanges();
		}
		void _btnCancel_Click(object sender, EventArgs e)
		{
			entityDataSource1.CancelChanges();
		}
		void _btnRefresh_Click(object sender, EventArgs e)
		{
			entityDataSource1.Refresh();
		}

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

Есть одна важная деталь, про которую часто забывают: при сохранении изменений в базу данных возможно появление исключений. Например, при сохранении изменений, нарушающих ограничения целостности БД. К сожалению, нет общих рецептов для борьбы с этим типом исключения. Их природа зависит от схемы базы данных и самого приложения.

Независимо от того, как вы планируете бороться с возможными исключениями, первое, что нужно сделать — это поймать их. Чтобы сделать это, нужно обернуть вызов метода SaveChanges блоком try/catch, или добавить обработчик события DataError в компонент EntityDataSource. Вот так наше приложение сможет обработать возможные ошибки при сохранении данных:

		// report any errors
		void entityDataSource1_DataError(object sender, DataErrorEventArgs e)
		{
			MessageBox.Show("Error Detected:rn" + e.Exception.Message);
			entityDataSource1.CancelChanges();
			e.Handled = true;
		}

Код выдает предупреждение, отменяет изменения, и устанавливает параметр Handled в True, чтобы указать, что ошибка уже обработана и генерировать исключения не нужно.

Использование поиска по словарям для представления связанных сущностей

Чтобы закончить с этим примером, давайте рассмотрим обычный сценарий. У класса Product есть два свойства — Category и Supplier, представляющие собой связанные сущности. По умолчанию эти свойства не представлены в таблице, но с помощью редактора колонок можно добавить столбцы для этих сущностей в нашу таблицу. Изображение ниже показывает, как это можно сделать:

Проблема состоит в том, что DataGridView не знает, как отображать связанную сущность, по умолчанию просто используется метод ToString, и в результате мы получаем два столбцы „только для чтения“, ячейки которых заполнены значениями “Sample.Category” и “Sample.Supplier”.

Но для выполнения реальной работы требуется столбец, который показывает категории и имена поставщиков, в идеале с редактором, позволяющим изменять категории и поставщиков путем выбора из списков. Обычно это делается путем написания кода для создания и связывания пользовательских столбцов (в DataGridViewComboBoxColumn если вы используете элемент управления DataGridView).

Т.к. это распространенный сценарий, компонент EntityDataSource поддерживает расширенное свойство AutoLookup. Это свойство автоматически становится доступным в любом элементе управления DataGridView или C1FlexGrid размещенным на форме (в C1FlexGrid является популярным компонентом табличного представления данных, значительно быстрее и навороченней чем DataGridView).

Обратите внимание, что хотя компонент EntityDataSource поддерживает C1FlexGrid, сборка EFWinForms не зависит от сборки C1FlexGrid. Это достигается с помощью ключевого слово »dynamic», которое опирается главным образом на рефлексию, чтобы связывать свойства во время выполнения. Тот же самый механизм может использоваться, чтобы расширить компонент EntityDataSource для поддержки в других компонентах табличного представления данных.

На рисунке ниже показано, как можно включить свойство AutoLookup в DataGridView:

Как только вы включите свойство AutoLookup, компонент EntityDataSource будет автоматически сканировать столбцы в таблице, чтобы заменить столбцы, привязанные к сущностям на редактируемые столбцы, основанные на “data map”, содержащие список возможных значений связанных сущностей и отображения значений для каждого из них.

На рисунке ниже показан результат установки свойства AutoLookup в True:

Обратите внимание, как столбцы “Category” и “Supplier” показывают имена категорий и названия поставщиков, и что можно поменять поставщика для продукта, просто выбрав нового из списка.

Вы можете удивиться, как EntityDataSource выбирает нужное поле из связанных сущностей для отображения в таблице. Это делается с помощью следующего алгоритма:

  1. Если класс реализует метод ToString (а не просто наследует), тогда реализация ToString используется для представления сущности.
  2. В противном случае, если у класса есть свойство типа string, в названии которого есть слово “Name”, то это свойство используется для представления сущности.
  3. В противном случае, если у класса есть свойство типа string, в названии которого есть слово “Description”, то это свойство используется для представления сущности.
  4. Если ничего из вышеперечисленного не применяется, то привязка данных не может быть выполнена для этого класса.

Первое правило наиболее общее и гибкое. Например, класс Employee в базе данных «Northwind » имеет свойства Firstname и Lastname. Какое-то одно из них может быть использовано для представления сущностей в списке, но в идеале хотелось бы использовать оба. Чтобы сделать это, мы просто переопределим метод ToString в классе Employee и создадим строку состоящую из обоих свойств:

			
	/// <summary>
	/// Add a field with the employee's full name
	/// </summary>
	public partial class Employee
	{
		public string FullName
		{
		  get { return string.Format("{0} {1}", FirstName, LastName); }
		}
		public override string ToString()
		{
		  return FullName;
		}
	}

Обратите внимание, что использование частичного класса расширяет стандартный класс, созданный с помощью мастера ADO.NET Entity Framework. Если в какой-то момент вы решите заново сгенерировать модель сущности данных, наша реализация метода ToString не будет затронута.

В базе данных «Northwind», Employee — единственный класс, который требует каких-либо специальных методов для привязки данных. Все остальные классы имеют такие свойства, как “CustomerName” или “CategoryDescription”, которые автоматически используются компонентом EntityDataSource и обеспечивают необходимый эффект.

На этом первый пример окончен.


Содержание

  • Условие задачи
  • Выполнение
    • 1. Создать новый проект в MS Visual Studio как Windows Forms Application.
    • 2. Создание нового представления (view) для отображения данных таблицы Student.
    • 3. Размещение элемента управления DataGridView и настройка связи с базой данных.
    • 4. Настройка вида элемента управления типа DataGridView.
    • 5. Строка Connection String.
    • 6. Создание новой формы для демонстрации команд манипулирования данными.
    • 7. Добавление кнопок вызова команд манипулирования данными таблицы Student.
    • 8. Программирование события клика на кнопке «Insert…«.
    • 9. Программирование события клика на кнопке «Edit…«.
    • 10. Программирование события клика на кнопке «Delete«.
  • Связанные темы

Поиск на других ресурсах:

Условие задачи

Разработать приложение, которое демонстрирует основные операции над данными в базе данных типа MS SQL Server, а именно:

  • подключение базы данных к приложению;
  • отображение таблиц базы данных на форме;
  • добавление новой записи в базу данных;
  • редактирование записи;
  • удаление записи.

За основу взята база данных Education.dbo, процесс создания которой подробно описывается здесь.

На рисунке 1 отображена структура базы данных Education.dbo. Как видно из рисунка, база данных называется:

sasha-pcsqlexpress.Education.dbo

Здесь «sasha-pc» – идентификатор компьютера в сети, «sqlexpress» – название сервера баз данных, «Education.dbo» – название базы данных.

SQL Server (SQL Express) База данных Education.dbo

Рис. 1. База данных Education.dbo

База данных содержит две таблицы: Student и Session. Структура таблиц следующая.

Таблица Student.

Таблица Student

Таблица Session.

Таблица Session

 


Выполнение

1. Создать новый проект в MS Visual Studio как Windows Forms Application.

Создать новый проект типа Windows Forms Application. Пример создания нового проекта подробно описывается здесь.

 

2. Создание нового представления (view) для отображения данных таблицы Student.

Чтобы отображать данные таблиц базы данных, можно использовать разные способы. Один из них – это создание представлений (views), которые формируются средствами MS Visual Studio.

В нашем случае данные таблиц будут отображаться на форме в элементе управления типа DataGridView. После создания представлений, очень удобно их связать с элементами DataGridView.

Для создания представления, нужно вызвать команду «Add New View» из контекстного меню, которое вызывается кликом правой кнопкой мышки на элементе «Views» базы данных Education.dbo (рисунок 2).

База данных SQL Server команда "Add New View"

Рис. 2. Вызов команды добавления нового представления

В результате откроется окно «Add Table» (рисунок 3). В окне нужно выбрать таблицы, которые добавляются к представлению.

SQL Server Выбор таблица команда Add Table

Рис. 3. Выбор таблиц, на которых будет базироваться новое представление

В нашем случае выбираем таблицу Student и подтверждаем свой выбор кликом на кнопке Add. Следующим шагом нужно закрыть окно выбором кнопки Close.

После выполненных действий будет сформировано окно, в котором нужно выбрать поля, которые должны отображаться в представлении (на форме). Выбираем все поля (рисунок 4).

При выборе полей, в верхней части рабочей области отображаются поля таблицы Student. С помощью «мышки» можно выбирать нужные поля для представления.

Соответственно, в средней области окна отображаются названия выбранных полей, таблица в которой они есть (см. рис. 4), возможность сортировки, фильтрование и прочее.

В нижней части области отображается соответствующий текст SQL-запроса, который используется для создания представления.

MS SQL Server Выбор полей таблица Student

Рис. 4. Выбор полей таблицы Student для их отображения в представлении

После выбора команды

File->Save All

или

File->Save View1

откроется окно, в котором нужно указать имя представления. Задаем имя «View Student» (рисунок 5).

MS SQL Server Указание имени представление

Рис. 5. Указание имени для представления

После выполненных действий, окно представления будет иметь вид как показано на рисунке 6.

MS SQL Server Представление

Рис. 6. Представление View Student в базе данных

Теперь можно размещать элемент управления DataGridView и связывать его с представлением.

 

3. Размещение элемента управления DataGridView и настройка связи с базой данных.

Перед размещением элемента управления DataGridView нужно перейти в режим проектирования формы «Form1.cs [Design]«.

Элемент DataGridView представляет собой таблицу, которая может отображать данные. Данный элемент управления размещается в панели ToolBox. Сначала немного корректируем размеры формы, а потом размещаем на ней элемент управления DataGridView (рисунок 7). В результате будет создан экземпляр объекта с именем dataGridView1 по умолчанию.

SQL Server Элемент управления DataGridView окно выбора источника данных

Рис. 7. Элемент управления DataGridView и окно выбора источника данных

После размещения элемента управления типа DataGridView на форме в правом верхнем углу можно выбрать настройку источника данных. Соответственно откроется окно «DataGridView Tasks«. В этом окне нужно выбрать сплывающее меню «Choose Data Source«.

В открывшемся меню выбирается команда «Add Project Data Source…» (рис. 7). После этого открывается окно мастера, в котором последовательно выбирается источник данных.



На рисунке 8 показано окно «Data Source Configuration Wizard«, в котором выбирается тип источника данных. В нашем случае устанавливаем «Database«.

База данных MS SQL Server тип источника данных

Рис. 8. Выбор типа источника данных

В следующем окне (Рисунок 9) выбирается модель источника данных. Нужно выбрать DataSet.

MS SQL Server Выбор модели источника данных

Рис. 9. Выбор модели источника данных

В окне, изображенном на рисунке 10, нужно задать соединение данных, которое нужно использовать для подключения к базе данных. В нашем случае нужно выбрать базу данных «sasha-pcsqlexpressEducation.dbo«.

MS SQL Server соединение данных

Рис. 10. Выбор соединения данных

В следующем окне (рисунок 11) предлагается сохранить строку соединения Connection String в конфигурационный файл приложения. Оставляем все как есть и переходим к следующему окну.

Предложение сохранения Connection String конфигурационный файл

Рис. 11. Предложение сохранения строки соединения с базой данных Connection String в конфигурационном файле приложения

После создания соединения с базой данных отображается множество объектов базы данных (рисунок 12). В нашем случае нужно выбрать представление «View Student» и все поля из него. Отмеченные поля будут отображаться в компоненте типа DataGridView.

MS SQL Server объект база данных DataGridView

Рис. 12. Выбор объектов базы данных, которые нужно отображать в DataGridView

После выбора кнопки Finish будут отображены выбранные объекты (представление View Student) базы данных Education.dbo (рисунок 13).

C# Windows Forms Application Элемент управления DataGridView

Рис. 13. Элемент управления типа DataGridView с выбранными полями представления View Student

Подобным образом можно настроить представления, которые содержат любые поля из любых таблиц базы данных. Также в одном представлении могут отображаться поля из разных таблиц.

 

4. Настройка вида элемента управления типа DataGridView.

Если запустить приложение на выполнение, то будут получены данные представления View Student, которое отвечает таблице Student базы данных (рисунок 14).

C# Шаблон Windows Forms Запуск приложениеРис. 14. Запуск приложения на выполнение

Как видно из рисунка 14, данные в таблице dataGridView1 отображаются нормально, но оформление можно скорректировать.

Элемент управления типа DataGridView допускает корректирование вида полей, которые отображаются.

Для вызова команд редактирования полей, достаточно вызвать контекстное меню кликом правой кнопкой мышки на элементе управления dataGridView1.

В меню существуют различные полезные команды, которые разрешают управлять видом и работой DataGridView:

  • команда блокирования элемента управления (Lock Controls);
  • команда редактирования полей, которые отображаются в представлении (Edit Columns…);
  • команда добавления новых полей, например вычисляемых (Add Column).

В нашем случае нужно выбрать команду «Edit Columns…» (рисунок 15).

MS SQL Server Команда "Edit Columns..."

Рис. 15. Команда «Edit Columns…» из контекстного меню

В результате откроется окно «Edit Columns«, в котором можно настроить вид полей представления по собственному вкусу (рисунок 16).

MS SQL Server Окно настройки вида полей "View Student"Рис. 16. Окно настройки вида полей в представлении «View Student«

В окне на рисунке 16 для любого поля можно настроить название, выравнивание, ширину, возможность редактирования данных и т.п.

 

5. Строка Connection String

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

Существуют разные способы получения строки соединения с базой данных. Один из них базируется на чтении этой строки в окне Properties базы данных Education.dbo (рис. 17).

C# Windows Forms Определение строки Connection StringРис. 17. Определение строки Connection String

Для сохранности строки в программе вводится внутренняя переменная типа string. С помощью буфера обмена копируем строку Connection String в описанную переменную типа string.

В тексте файла «Form1.cs» в начале описания класса Form1 надо описать переменную:

string conn_string = @"Data Source=(local)SQLEXPRESS;Initial Catalog=Education;Integrated Security=True;Pooling=False";

На данный момент текст класса Form1 следующий:

public partial class Form1 : Form
{
    string conn_string = @"Data Source=(local)SQLEXPRESS;Initial Catalog=Education;Integrated Security=True;Pooling=False";

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'educationDataSet.View_Student' table. You can move, or remove it, as needed.
        this.view_StudentTableAdapter.Fill(this.educationDataSet.View_Student);
    }
}

 

6. Создание новой формы для демонстрации команд манипулирования данными.

Для того, чтобы иметь возможность обрабатывать данные текущей записи нужно создать новую форму. Процесс создания новой формы в MS Visual Studio — C# подробно описывается здесь.

Добавление новой формы осуществляется командой:

Project -> Add Windows Form...

В открывшемся окне «New Item» нужно выбрать элемент «Windows Form«.

Имя файла новой формы оставляем по умолчанию «Form2.cs«.

На рисунке 18 изображен вид новой формы.

Размещаем на форме элементы управления следующих типов:

  • два элемента управления типа Button (кнопки OK и Cancel). Соответственно будет получено два объекта с именами button1 и button2;
  • четыре элемента управления типа Label для создания информационных сообщений;
  • четыре элемента управления типа TextBox для ввода данных в полях Num_book, Name, Group, Year.

Нужно настроить следующие свойства элементов управления:

  • в элементе управления button1 свойство Text = «OK«;
  • в элементе управления button2 свойство Text = «Cancel«;
  • в элементе управления button1 свойство DialogResult = «OK«;
  • в элементе управления button2 свойство DialogResult = «Cancel«;
  • в элементе управления label1 свойство Text = «Num_book«;
  • в элементе управления label2 свойство Text = «Name«;
  • в элементе управления label3 свойство Text = «Group«;
  • в элементе управления label4 свойство Text = «Year«.

Также настраиваем видимость элементов управления типа TextBox. Для этого во всех элементах управления textBox1, textBox2, textBox3, textBox4 значение свойства Modifiers = «public«.

C# Windows Forms Вид формаРис. 18. Вид новосозданной формы

 

7. Добавление кнопок вызова команд манипулирования данными таблицы Student.

Для дальнейшей работы нужно с помощью мышки переключиться на главную форму Form1.

На главную форму приложения Form1 добавляем три кнопки (Button). Автоматически будет создано три переменных-объекта с именами button1, button2, button3. В каждой из этих кнопок вносим следующие настройки (окно Properties):

  • в кнопке button1 свойство Text = «Insert …» (вставить запись);
  • в кнопке button2 свойство Text = «Edit …» (изменить запись);
  • в кнопке button3 свойство Text = «Delete«.

В результате внесенных изменений главная форма будет иметь вид как показано на рисунке 19.

C# Windows Forms Главная форма приложенияРис. 19. Главная форма приложения

 

8. Программирование события клика на кнопке «Insert…«.

Обработчик события клика на кнопке «Insert…» имеет вид:

private void button1_Click_1(object sender, EventArgs e)
{
    string cmd_text;
    Form2 f2 = new Form2();
    if (f2.ShowDialog() == DialogResult.OK)
    {
        cmd_text = "INSERT INTO Student VALUES (" +
        "'" + f2.textBox1.Text + "' , '" +
        f2.textBox2.Text + "' , '" +
        f2.textBox3.Text + "' , " +
        f2.textBox4.Text + ")";

        // создать соединение с базой данных
        SqlConnection sql_conn = new SqlConnection(conn_string);

        // создать команду на языке SQL
        SqlCommand sql_comm = new SqlCommand(cmd_text, sql_conn);

        sql_conn.Open(); // открыть соединение
        sql_comm.ExecuteNonQuery(); // выполнить команду на языке SQL
        sql_conn.Close(); // закрыть соединение

        this.view_StudentTableAdapter.Fill(this.educationDataSet.View_Student);
    }

}

Сначала вызывается форма Form2. После получения результата «OK» (нажатие соответствующей кнопки), в форме Form2 заполненные поля в элементах типа TextBox включаются в строку SQL-запроса. SQL-запрос добавления новой строки имеет вид:

INSERT INTO Student
VALUES (value1, value2, value3, value4)

где value1 отвечает номеру зачетной книжки; value2 – фамилия студента; value3 – группа, в которой учится студент; value4 – год вступления.

Строка соединения с базой данных Connection String описывается в переменной conn_string (см. п. 5). Объект класса SqlConnection осуществляет соединение приложения с источниками данных. Кроме того, класс Connection решает задачи аутентификации пользователей, работу с сетями, идентификацию баз данных, буферизацию соединений и обработку транзакций.

Команда на языке SQL, добавляющая запись к таблице, инкапсулирована в классе SqlCommand. Конструктор класса SqlCommand принимает два параметра: строку запроса на языке SQL (переменная cmd_text) и объект класса SqlConnection.

Метод ExecuteNonQuery() реализован в интерфейсе IDBCommand. Метод реализует SQL-команды, которые не возвращают данные. К таким командам относятся команды INSERT, DELETE, UPDATE а также хранимые процедуры, которые не возвращают данных. Метод ExecuteNonQuery() возвращает количество задействованных ним записей.

 

9. Программирование события клика на кнопке «Edit…«.

Обработчик события клика на кнопке «Edit…» имеет вид:

private void button2_Click(object sender, EventArgs e)
{
    string cmd_text;
    Form2 f2 = new Form2();
    int index;
    string num_book;

    index = dataGridView1.CurrentRow.Index;
    num_book = Convert.ToString(dataGridView1[0, index].Value);

    f2.textBox1.Text = num_book;
    f2.textBox2.Text = Convert.ToString(dataGridView1[1, index].Value);
    f2.textBox3.Text = Convert.ToString(dataGridView1[2, index].Value);
    f2.textBox4.Text = Convert.ToString(dataGridView1[3, index].Value);

    if (f2.ShowDialog() == DialogResult.OK)
    {
        cmd_text = "UPDATE Student SET Num_book = '" + f2.textBox1.Text + "', " +
        "[Name] = '" + f2.textBox2.Text + "', " +
        "[Group] = '" + f2.textBox3.Text + "', " +
        "Year = " + f2.textBox4.Text +
        "WHERE Num_book = '" + num_book + "'";

        SqlConnection sql_conn = new SqlConnection(conn_string);
        SqlCommand sql_comm = new SqlCommand(cmd_text, sql_conn);

        sql_conn.Open();
        sql_comm.ExecuteNonQuery();
        sql_conn.Close();

        this.view_StudentTableAdapter.Fill(this.educationDataSet.View_Student);
    }
}

В этом обработчике выполняется SQL-команда UPDATE, которая изменяет текущее значение активной записи.

 

10. Программирование события клика на кнопке «Delete«.

Обработчик события клика на кнопке «Delete» имеет вид:

private void button3_Click(object sender, EventArgs e)
{
    string cmd_text = "DELETE FROM Student";
    int index;
    string num_book;

    index = dataGridView1.CurrentRow.Index;
    num_book = Convert.ToString(dataGridView1[0,index].Value);
    cmd_text = "DELETE FROM Student WHERE [Student].[Num_book] = '" + num_book + "'";

    SqlConnection sql_conn = new SqlConnection(conn_string);
    SqlCommand sql_comm = new SqlCommand(cmd_text, sql_conn);

    sql_conn.Open();
    sql_comm.ExecuteNonQuery();
    sql_conn.Close();

    this.view_StudentTableAdapter.Fill(this.educationDataSet.View_Student);
}

В этом обработчике выполняется SQL-команда удаления записи DELETE.

 


Связанные темы

  • Вывод таблицы базы данных Microsoft Access в компоненте dataGridView
  • Подключение к базе данных Microsoft Access в MS Visual Studio 2010
  • Перевод базы данных Microsoft Access в формат Microsoft SQL Server
  • C# (курсовая). Разработка приложения автоматизации диспетчера касс автовокзала

 


Приветствую всех, в этом примере я покажу как просто создать приложения позволяющее, изменять, обновлять и удалять запись в базе данных SQL.

Шаг 1: Откройте менеджер Sql Server, нажмите на новую базу данных . Дайте базе данных имя «dbSchool».

Шаг 2: Теперь создайте таблицу в базе данных, вы можете назвать таблицу как хотите, здесь я назвал его “Student”. Существует три столбца в таблице IDFirstName и LastName, как показано ниже

Дизайн Формы:

Код C# :

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

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Data.SqlClient; //For SQL Connection

namespace Пример_SQL_Server_приложения

{

    public partial class Form1 : Form  //www.nookery.ru

    {

        public Form1()

        {

            InitializeComponent();

        }

        SqlConnection con;

        SqlDataAdapter da;

        SqlCommand cmd;

        DataSet ds;

        void GetList()

        {

            con = new SqlConnection(@»Data Source=.SQLEXPRESS; Initial Catalog=dbSchool; Integrated Security=True»);

            da = new SqlDataAdapter(«Select *From Student», con);

            ds = new DataSet();

            con.Open();

            da.Fill(ds, «Student»);

            dataGridView1.DataSource = ds.Tables[«Student»];

            con.Close();

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            GetList();

        }

        private void button1_Click(object sender, EventArgs e) // Insert Button

        {

            cmd = new SqlCommand();

            con.Open();

            cmd.Connection = con;

            cmd.CommandText = «insert into Student(ID,FirstName,LastName) values (« + textBox1.Text + «,'» + textBox2.Text + «‘,'» + textBox3.Text + «‘)»;

            cmd.ExecuteNonQuery();

            con.Close();

            GetList();

        }

        private void button2_Click(object sender, EventArgs e)//Update Button

        {

            cmd = new SqlCommand();

            con.Open();

            cmd.Connection = con;

            cmd.CommandText = «update Student set FirstName='» + textBox2.Text + «‘,LastName='» + textBox3.Text + «‘ where ID=» + textBox1.Text + «»;

            cmd.ExecuteNonQuery();

            con.Close();

            GetList();

        }

        private void button3_Click(object sender, EventArgs e)//Delete Button

        {

            cmd = new SqlCommand();

            con.Open();

            cmd.Connection = con;

            cmd.CommandText = «delete from Student where ID=» + textBox1.Text + «»;

            cmd.ExecuteNonQuery();

            con.Close();

            GetList();

        }

    }

}

В данной статье мы подробно поговорим о разработке небольшого приложения с помощью Visual Studio базы данных и языка C#. Советуем поэтапно выполнять все инструкции из данной статьи и у Вас получиться разработать свое приложение.

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

В качестве СУБД выберем программу Microsoft Access. Но вы можете использовать и другую базу данных.

Создаем базу данных в Microsoft Access и называем её «test». В этой базе данных создаем таблицу «contacts»:

Работа с базой данных в C#

Заполните базу данных данными:

Работа с базой данных в C#

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

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

В Visual Studio создаём проект:

Работа с базой данных в C#

После создания проекта добавляем на форму компонент «DataGridView» (компоненты находятся слева в «Панели элементов»). Открываем область «Задачи»:

Работа с базой данных в C#

Открываем список «Выберите источник данных» и нажимаем на ссылку «Добавить источник данных проекта»:

Работа с базой данных в C#

Откроется «Мастер настройки источника данных». В качестве источника выбираем «База данных» и идем далее:

Работа с базой данных в C#

В следующем окне идем далее:

Работа с базой данных в C#

В окне «Выбор подключения к базе данных» нажимаем на «Создать подключение»:

Работа с базой данных в C#

В окне «Выбора источника» выбираем «Другое» и поставщик данных ставим «Поставщик данных .NET Framework для OLE DB»:

Работа с базой данных в C#

В следующем окне «Добавить подключение» выбираем в «Поставщик OLE DB» Microsoft Office 16.0 Access Database. В «Имя сервера или файла» вписываем путь к нашему файлу базы данных Access (который создали в первом пункте). Проверяем подключение и жмем «ОК»:

Работа с базой данных в C#

Update 2021: Visual Studio 2019 требует файл Access старого формата (.mdb – это старый формат баз данных Access 2002-2003):

Работа с базой данных в C#

В следующем окне идем далее:

Работа с базой данных в C#

Выйдет окно для переноса файла базы данных в Ваш проект нажимаем «Да»:

Работа с базой данных в C#

В следующем окне ничего не меняем и идем далее:

Работа с базой данных в C#

В следующем окне выбираем нашу таблицу «contacts» и жмем «Готово»:

Работа с базой данных в C#

После всех манипуляций наша форма должна быть примерно такой:

Работа с базой данных в C#

Если запустить наш проект, то можно увидать данные из нашей базы данных:

Работа с базой данных в C#

Поменяйте ширину всех столбцов на «150» чтобы столбцы вместились во все окно:

Работа с базой данных в C#

Вот так без единой строчки кода мы вывели данные из нашей таблицы на нужную нам форму. Переходим к 3 пункту.

3. Сохранение данных

Базу данных мы видим, но редактировать её невозможно и именно поэтому нам нужна кнопка «Сохранить». Добавляем на форму кнопку и в свойствах меняем имя на «SaveButton». После добавления кнопки нажимаем на нее два раза и пишем код:

private void SaveButton_Click(object sender, EventArgs e)
 {
   contactsTableAdapter.Update(testDataSet);
 }

Вышеуказанный код обновляет запись в нашей таблице «contacts». TableAdapter использует команды данных для чтения и записи в базу данных. В «testDataSet» хранятся настройки подключения базы данных.

После добавления кода запустите свое приложение и попробуйте изменить любую запись и сохранить.

4. Изменение заголовков столбцов таблицы

Изменим текст столбцов и скроем столбец «img»:

Работа с базой данных в C#

Полезные свойства для изменения столбцов:

  • HeaderText – задает название столбца.
  • Visible – скрывает заголовок или наоборот.
  • Width – ширина столбца.
  • Resizable – можно ли изменять ширину столбца.

После того как скроете заголовок «img» измените ширину всех остальных заголовков:

Работа с базой данных в C#

5. Защита от случайного удаления

Чтобы пользователь случайно не удалил запись в нашей базе данных нужно сделать так чтобы перед удалением приложение спрашивало об удалении записи.

Для этого перейдем к компоненту DataGridView, откроем список событий и установим обработчик для события UserDeletingRow. Нажмите два раза на пустую строчку возле события и перейдете к коду. Вписываем код:

private void dataGridView1_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            DialogResult dr = MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
            if (dr == DialogResult.Cancel)
            {
                e.Cancel = true;
            }
        }

После этого проверим работоспособность данного кода. Запустим приложение и попробуем удалить запись. Должно быть вот так:

Работа с базой данных в C#

Как только пользователь выделит строчку и нажмет кнопку «Delete» сработает наше событие «dataGridView1_UserDeletingRow» и выскочить окно с вопросом об удалении. Вот скриншот где находятся события выбранного компонента:

Работа с базой данных в C#

6. Добавление данных

Добавляем новую форму в проект и называем ее «AddForm»:

Работа с базой данных в C#

Работа с базой данных в C#

Изменяем заголовок формы и добавляем на форму компоненты:

  • 1 groupBox c текстом «Добавление записи»;
  • 4 TextBox и меняем свойство «Name» на (tbName, tbPhone, tbMail, tbPhoto);
  • 4 label и меняем текст на (Имя, Телефон, E-mail, Фото);
  • 1 Button и меняем свойство «Name» на «AddBtn» (Добавить);
  • 1 Button и меняем свойство «Name» на «CloseBtn» (Закрыть).

Работа с базой данных в C#

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

 private void button1_Click(object sender, EventArgs e)
        {
            AddForm af = new AddForm();
            af.Owner = this;
            af.Show();
        }

Проверьте работоспособность приложения:

Работа с базой данных в C#

Возвращаемся на форму «Добавления записи». Пишем обработчик событий для кнопки «CloseBtn»:

private void button2_Click(object sender, EventArgs e)
        {
            Close();
        }

Чтобы обработчик событий на кнопке «AddBtn» работал как надо нужно выполнить несколько действий. Зайти в «Form1.Designer.cs» и изменить модификаторы доступа на «public» нижеуказанных файлов:

  • System.Windows.Forms.DataGridView dataGridView1;
  • testDataSet testDataSet;
  • System.Windows.Forms.BindingSource contactsBindingSource;
  • testDataSetTableAdapters.contactsTableAdapter contactsTableAdapter;

Это нужно для того чтобы наша база данных была доступна для разных с ней манипуляций во всех создаваемых нами формах. Обработчик событий для кнопки «AddBtn»:

public void AddBtn_Click(object sender, EventArgs e)
        {
            Form1 main = this.Owner as Form1;
            if (main != null)
            {
                DataRow nRow = main.testDataSet.Tables[0].NewRow();
                int rc = main.dataGridView1.RowCount + 1;
                nRow[0] = rc;
                nRow[1] = tbName.Text;
                nRow[2] = tbPhone.Text;
                nRow[3] = tbMail.Text;
                nRow[4] = tbPhoto.Text;
                main.testDataSet.Tables[0].Rows.Add(nRow);
                main.contactsTableAdapter.Update(main.testDataSet.contacts);
                main.testDataSet.Tables[0].AcceptChanges();
                main.dataGridView1.Refresh();
                tbName.Text = "";
                tbPhone.Text = "";
                tbMail.Text = "";
                tbPhoto.Text = "";
            }
        }

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

7. Поиск данных

Реализуем самый простой поиск. Данный поиск используется в небольших приложениях. Создаем новую форму с именем «SearchForm» и добавляем на форму компоненты:

  • 1 GroupBox (Поиск);
  • 1 label;
  • 2 button (Найти и Закрыть);
  • 1 TextBox и меняем в свойствах «Name» на «tbStr».

Работа с базой данных в C#

Переходим на главную форму и добавляем кнопку «Найти» для поиска записей. Дважды щелкаем на нее и пишем код для вызова нашей новой формы:

private void button2_Click(object sender, EventArgs e)
        {
            SearchForm sf = new SearchForm();
            sf.Owner = this;
            sf.Show();
        }

Проверяем работоспособность приложения:

Работа с базой данных в C#

Возвращаемся на форму «Поиска». Пишем обработчик событий для кнопки «Закрыть»:

private void button2_Click(object sender, EventArgs e)
        {
            Close();
        }

Пишем обработчик событий для кнопки «Найти»:

private void button1_Click(object sender, EventArgs e)
        {
            Form1 main = this.Owner as Form1;
            if (main != null)
            {
                for (int i = 0; i < main.dataGridView1.RowCount; i++)
                {
                    main.dataGridView1.Rows[i].Selected = false;
                    for (int j = 0; j < main.dataGridView1.ColumnCount; j++)
                        if (main.dataGridView1.Rows[i].Cells[j].Value != null)
                        if (main.dataGridView1.Rows[i].Cells[j].Value.ToString().Contains(tbStr.Text))
                            {
                                main.dataGridView1.Rows[i].Selected = true;
                                break;
                            }
                }
            }
        }

На главную форму добавляем кнопку «Выход» и пишем для нее код:

private void button3_Click(object sender, EventArgs e)
        {
            Close();
        }

Итоговая форма приложения:

Работа с базой данных в C#

Верхнее меню на нашей форме это компонент «MenuStrip». На этом наша разработка приложения готова. Дальше попробуйте самостоятельно улучшить свое приложение.

Исходники готового приложения можно скачать по ссылке.

Решение проблем совместимости Microsoft Access 2019 и Visual Studio 2022:

Содержание

  1. Windows forms база данных sql
  2. Создание базы данных и добавление таблиц в Visual Studio
  3. Предварительные требования
  4. Создание проекта и файла локальной базы данных
  5. Добавление источника данных
  6. Просмотр свойств подключения к данным
  7. Создание таблиц и ключей с помощью конструктор таблиц
  8. Создание таблицы Customers
  9. Создание таблицы Orders
  10. Создание внешнего ключа
  11. Заполнение таблиц данными
  12. Создание формы Windows Forms для поиска данных
  13. Предварительные требования
  14. создание приложения Windows Forms
  15. Создание источника данных
  16. Создание источника данных
  17. Создание формы
  18. Добавление параметризации (функции поиска) в запрос
  19. Тестирование приложения
  20. Дальнейшие действия
  21. Работа с базами данных в Windows Forms с использованием языка программирования C++
  22. Создание простого приложения для работы с данными с помощью ADO.NET
  23. Предварительные требования
  24. Настройка образца базы данных
  25. Создание форм и добавление элементов управления
  26. Сохранение строки подключения
  27. Написание кода для форм
  28. Форма навигации
  29. Преобразование формы навигации в начальную форму
  30. Создание автоматически создаваемых обработчиков событий
  31. Добавление кода для логики формы навигации
  32. Форма NewCustomer
  33. Создание автоматически создаваемых обработчиков событий
  34. Добавление кода для логики формы NewCustomer
  35. Форма FillOrCancel
  36. Создание автоматически создаваемых обработчиков событий
  37. Добавление кода для логики формы Филлорканцел
  38. Тестирование приложения

Windows forms база данных sql

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

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

datagridview

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

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

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

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

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

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

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

Источник

Создание базы данных и добавление таблиц в Visual Studio

Visual Studio можно использовать для создания и обновления файла локальной базы данных в SQL Server Express LocalDB. можно также создать базу данных, выполнив инструкции Transact-SQL в окне инструментов обозревателя объектов SQL Server в Visual Studio. В этом разделе мы создадим MDF файл и добавим таблицы и ключи с помощью Конструктор таблиц.

Предварительные требования

Создание проекта и файла локальной базы данных

в строке меню выберите Project > добавить новый элемент.

В списке шаблонов элементов прокрутите вниз и выберите база данных на основе службы.

visual studio add service databaseбазы данных на основе службы» data-linktype=»relative-path»>

raddata vsitemtemplatesбазы данных на основе службы» data-linktype=»relative-path»>

Присвойте базе данных имя сампледатабасе и нажмите кнопку Добавить.

Добавление источника данных

если окно источники данных не открыто, откройте его, нажав клавиши Shift + Alt + D или выбрав просмотреть > другие Windows > источники данных в строке меню.

В окне Источники данных выберите Добавить новый источник данных.

add new data source

add new data source

На странице Выбор подключения к данным выберите файл сампледатабасе. mdf в раскрывающемся списке и нажмите кнопку Далее.

На странице сохранить строку подключения в файле конфигурации приложения нажмите кнопку Далее.

На странице Выбор объектов базы данных появится сообщение о том, что база данных не содержит объектов. Нажмите кнопку Готово.

Просмотр свойств подключения к данным

Создание таблиц и ключей с помощью конструктор таблиц

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

Создание таблицы Customers

Щелкните правой кнопкой мыши таблицы и выберите команду Добавить новую таблицу.

Будет открыт Конструктор таблиц, отобразится сетка с одной строкой по умолчанию, которая представляет один столбец в создаваемой таблице. Путем добавления строк в сетку будут добавлены столбцы в таблицу.

В сетке добавьте строку для каждой из следующих записей.

Имя столбца Тип данных Разрешить значения null
CustomerID nchar(5) False (не установлен)
CompanyName nvarchar(50) False (не установлен)
ContactName nvarchar (50) True (установлен)
Phone nvarchar (24) True (установлен)

Щелкните строку правой кнопкой мыши CustomerID и выберите пункт Задать первичный ключ.

Щелкните строку по умолчанию () правой кнопкой мыши Id и выберите пункт Удалить.

Назовите таблицу «Клиенты» путем обновления первой строки в области скриптов, как показано в следующем примере:

Отобразятся примерно следующие сведения:

table designer

table designer

В левом верхнем углу Конструктор таблиц выберите Обновить или нажмите клавиши SHIFT + ALT + U.

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

Таблица Customers создается в файле локальной базы данных.

Создание таблицы Orders

Создайте еще одну таблицу, а затем добавьте строку для каждой записи следующей таблицы.

Имя столбца Тип данных Разрешить значения null
OrderID int False (не установлен)
CustomerID nchar(5) False (не установлен)
OrderDate datetime True (установлен)
OrderQuantity int True (установлен)

Задайте OrderID в качестве первичного ключа, а затем удалите строку по умолчанию.

Назовите таблицу «Заказы» путем обновления первой строки в области скриптов, как показано в следующем примере:

В левом верхнем углу Конструктор таблиц выберите Обновить или нажмите клавиши SHIFT + ALT + U.

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

Таблица Orders создается в файле локальной базы данных. Если развернуть узел таблицы в обозреватель сервера, отобразятся две таблицы:

server explorer tables node

server explorer tables node

Если вы не видите его, нажмите кнопку Обновить на панели инструментов.

Создание внешнего ключа

В контекстной области в правой части сетки конструктор таблиц для таблицы Orders щелкните правой кнопкой мыши внешние ключи и выберите Добавить новый внешний ключ.

add foreign key

В появившемся текстовом поле замените текст ToTable на Customers.

в области T-SQL обновите последнюю строку, чтобы она соответствовала следующему примеру:

В левом верхнем углу Конструктор таблиц выберите Обновить (SHIFT + ALT + U).

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

Создается внешний ключ.

Заполнение таблиц данными

в обозреватель сервера или SQL Server обозревателе объектов разверните узел образца базы данных.

Откройте контекстное меню таблицы Customers и выберите Просмотреть данные.

Добавьте необходимые данные для некоторых клиентов.

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

Откройте контекстное меню таблицы Orders и выберите пункт отобразить данные таблицы.

Добавление данных для некоторых заказов. При вводе каждой строки она сохраняется в базе данных.

Убедитесь, что все идентификаторы заказов и количества заказов — целые числа, и каждый идентификатор клиента соответствует значению, указанному в столбце CustomerID таблицы клиентов.

Поздравляем! Теперь вы умеете создавать таблицы, связывать их с внешним ключом и добавлять данные.

Источник

Создание формы Windows Forms для поиска данных

Довольно распространенным сценарием приложения является отображение выбранных данных на форме. Например, вам может потребоваться отобразить заказы для определенного клиента или сведения о конкретном заказе. В таком сценарии пользователь вводит в форму информацию, после чего выполняется запрос, включающий в себя эти введенные пользователем данные в качестве параметра; таким образом, данные выбираются на основе параметризированного запроса. Запрос возвращает только те данные, которые удовлетворяют введенным пользователем условиям. Это пошаговое руководство показывает, как создать запрос, возвращающий клиентов из определенного города, и изменить пользовательский интерфейс, чтобы пользователи могли ввести название города и нажать кнопку для выполнения запроса.

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

В данном пошаговом руководстве представлены следующие задачи.

Создание отображающих данные элементов управления с помощью перетаскивания элементов из окна Источники данных на форму.

Добавление элементов управления для отображения данных на форме.

Ввод параметров в форму и выполнение параметризованного запроса.

Предварительные требования

Необходимо установить рабочую нагрузку » Хранение и обработка данных «. См. раздел Изменение Visual Studio.

в этом пошаговом руководстве используется SQL Server Express LocalDB и образец базы данных Northwind.

если у вас нет SQL Server Express LocalDB, установите его на странице загрузки SQL Server Expressили с помощью Visual Studio Installer. в Visual Studio Installer можно установить SQL Server Express LocalDB как часть рабочей нагрузки хранения и обработки данных или как отдельный компонент.

Установите учебную базу данных Northwind, выполнив следующие действия.

Откроется окно редактора запросов.

скопируйте скрипт Transact-SQL Northwind в буфер обмена. этот сценарий T-SQL создает базу данных Northwind с нуля и заполняет ее данными.

По истечении короткого времени выполнение запроса завершается и создается база данных Northwind.

создание приложения Windows Forms

Создание источника данных

На этом шаге Мастер настройки источника данных используется для создания источника данных из базы данных.

В окне Источники данных выберите Добавить новый источник данных, чтобы запустить Мастер настройки источника данных.

На странице Выбор типа источника данных выберите элемент База данных и нажмите Далее.

На странице Выбор подключения к базе данных выполните одно из следующих действий:

Если подключение к учебной базе данных Northwind доступно в раскрывающемся списке, то выберите его.

Выберите Новое подключение для открытия диалогового окна Добавить/изменить подключение.

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

На странице Сохранение подключения в файле конфигурации приложения нажмите кнопку Далее.

Разверните узел Таблицы на странице Выбор объектов базы данных.

Выберите таблицу Клиенты и нажмите Готово.

Объект NorthwindDataSet добавляется в проект, и таблица Клиенты отображается в окне Источники данных.

Создание источника данных

На этом шаге Мастер настройки источника данных используется для создания источника данных из базы данных.

В окне Источники данных выберите Добавить новый источник данных, чтобы запустить Мастер настройки источника данных.

На странице Выбор типа источника данных выберите элемент База данных и нажмите Далее.

На экране Выбор модели базы данных выберите набор данных, а затем нажмите кнопку Далее.

На странице Выбор подключения к базе данных выполните одно из следующих действий:

Если подключение к учебной базе данных Northwind доступно в раскрывающемся списке, то выберите его.

Выберите Новое подключение для открытия диалогового окна Добавить/изменить подключение.

На странице Сохранение подключения в файле конфигурации приложения нажмите кнопку Далее.

Разверните узел Таблицы на странице Выбор объектов базы данных.

Выберите таблицу Клиенты и нажмите Готово.

Объект NorthwindDataSet добавляется в проект, и таблица Клиенты отображается в окне Источники данных.

Создание формы

Можно создать элементы управления с привязкой к данным, перетащив элементы из окна Источники данных на форму:

убедитесь, что конструктор Windows Forms имеет активное фокус, а окно источники данных открыто и закреплено.

Разверните узел Customers в окне Источники данных.

Перетащите узел Клиенты из окна Источники данных на свою форму.

На форме появляются DataGridView и полоса инструментов (BindingNavigator) для перемещения по записям. В области компонентов появляется NorthwindDataSet, CustomersTableAdapter, BindingSource и BindingNavigator.

Добавление параметризации (функции поиска) в запрос

Предложение WHERE можно добавить в исходный запрос с помощью диалогового окна Построитель условий поиска :

Добавьте WHERE City = @City в запрос в области Текст запроса.

Запрос должен выглядеть примерно следующим образом:

Нажмите кнопку ОК, чтобы закрыть диалоговое окно Построитель условий поиска.

На форму добавляется FillByCityToolStrip.

Тестирование приложения

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

Нажмите клавишу F5 для запуска приложения.

Введите Лондон в текстовом поле Город и щелкните FillByCity.

Сетка данных заполняется клиентами, которые удовлетворяют критериям. В этом примере сетка данных отображает только клиентов, для которых в столбце Город задано значение Лондон.

Дальнейшие действия

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

Добавление элементов управления, отображающих связанные данные. Дополнительные сведения см. в разделе связи в наборах данных.

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

Источник

Работа с базами данных в Windows Forms с использованием языка программирования C++

Как известно, начиная с версии 2008, работа с базами данных (БД) в Windows Forms средствами Microsoft Visual C++ (VC++) невозможна. Однако это не совсем так.

Начиная с версии 2008, стала недоступна работа с БД с помощью уже привычного графического интерфейса. То есть, для работы с ними нельзя создать и настроить, а, следовательно, и использовать, не визуальные элементы управления DataSet, BindingSource и TableAdapter. В то же время возможно работы с БД при помощи «обычных» классов ADO.NET полностью сохранилась.

Для реализации взаимодействия с БД служат «обычные» классы OleDbConnection, OleDbCommand и OleDbDataReader. Но, в виду того, что в Windows Forms используется управляемый код с привязкой C++/CLI, их использование имеет некоторые особенности.

Рассмотрим пример. Есть БД Microsoft Office Access, которая содержит список авторов книг в таблице Author.

Tablitsa

Создадим простое приложение, которое будет загружать данные из этой таблицы (надписи элементов управления, включая заголовки столбцов DataGridView, предварительно настроены с помощью визуального конструктора).

DoPolucheniyaDannyih

Данные будем загружать в элемент управления DataGridView при нажатии на кнопку «Получить данные».

Создадим в обработчике события нажатия этой кнопки подключение к БД.

Источник

Создание простого приложения для работы с данными с помощью ADO.NET

В этой статье демонстрируется простой способ быстрого получения данных из базы данных. Если приложению необходимо изменить данные с помощью нетривиальных способов и обновить базу данных, следует рассмотреть возможность использования Entity Framework и привязки данных для автоматической синхронизации элементов управления пользовательского интерфейса с изменениями в базовых данных.

С целью упрощения код не включает обработку исключений для выполнения в рабочей среде.

Предварительные требования

Для создания приложения вам потребуются следующие компоненты.

SQL Server Express LocalDB. если у вас нет SQL Server Express LocalDB, его можно установить на странице загрузки SQL Server Express.

Настройка образца базы данных

Создайте образец базы данных, выполнив следующие действия.

щелкните правой кнопкой мыши подключения к данным и выберите команду создать новую базу данных SQL Server.

В текстовом поле имя сервера введите (LocalDB) mssqllocaldb.

В текстовом поле имя новой базы данных введите Sales, а затем нажмите кнопку ОК.

Пустая база данных Sales создается и добавляется в узел подключения к данным в обозреватель сервера.

Щелкните правой кнопкой мыши подключение к данным о продажах и выберите создать запрос.

Откроется окно редактора запросов.

По истечении короткого времени выполнение запроса завершается и создаются объекты базы данных. База данных содержит две таблицы: Customer и Orders. Эти таблицы изначально не содержат данных, но их можно добавить при запуске создаваемого приложения. База данных также содержит четыре простые хранимые процедуры.

Создание форм и добавление элементов управления

Создайте проект для приложения Windows Forms и назовите его SimpleDataApp.

Visual Studio создает проект и несколько файлов, включая пустую форму Windows Forms с именем Form1.

Добавьте две формы Windows Forms в проект, чтобы он включал три формы, и назначьте им следующие имена:

Навигация

NewCustomer

FillOrCancel

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

Элементы управления «группа» и «надпись» обеспечивают большую ясность, но не используются в коде.

Форма навигации

simpleappnav

Элементы управления формы навигации Элемент Property
Кнопка Name = btnGoToAdd
Кнопка Name = btnGoToFillOrCancel
Кнопка Name = btnExit

Форма NewCustomer

simpleappnewcust

Элементы управления формы NewCustomer Элемент Property
TextBox Name = txtCustomerName
TextBox Name = txtCustomerID

Readonly = True

Кнопка Name = btnCreateAccount
NumericUpDown DecimalPlaces = 0

Name = numOrderAmount

DateTimePicker Format = Short

Name = dtpOrderDate

Кнопка Name = btnPlaceOrder
Кнопка Name = btnAddAnotherAccount
Кнопка Name = btnAddFinish

Форма FillOrCancel

simpleappcancelfill

Элементы управления формы FillOrCancel Элемент Property
TextBox Name = txtOrderID
Кнопка Name = btnFindByOrderID
DateTimePicker Format = Short

Name = dtpFillDate

DataGridView Name = dgvCustomerOrders

RowHeadersVisible = False

Кнопка Name = btnCancelOrder
Кнопка Name = btnFillOrder
Кнопка Name = btnFinishUpdates

Сохранение строки подключения

Когда приложение пытается открыть подключение к базе данных, оно должно иметь доступ к строке подключения. Чтобы не вводить строку вручную в каждой форме, сохраните строку в файле App.config в проекте и создайте метод, возвращающий строку при вызове метода из любой формы в приложении.

В списке тип выберите (строка подключения).

В списке область выберите приложение.

В столбце значение введите строку подключения (без кавычек), а затем сохраните изменения.

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

Написание кода для форм

Этот раздел содержит краткие обзоры того, что делает каждая форма. Он также предоставляет код, определяющий базовую логику при нажатии кнопки на форме.

Форма навигации

Форма навигации открывается при запуске приложения. Кнопка Добавить учетную запись открывает форму NewCustomer. Кнопка Выполнение или отмена заказов открывает форму FillOrCancel. Кнопка Выход закрывает приложение.

Преобразование формы навигации в начальную форму

При использовании C# в обозревателе решений откройте файл Program.cs и измените строку Application.Run на следующую: Application.Run(new Navigation());

Создание автоматически создаваемых обработчиков событий

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

Добавление кода для логики формы навигации

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

Форма NewCustomer

Создание автоматически создаваемых обработчиков событий

Создайте пустой обработчик событий щелчка для каждой кнопки в форме NewCustomer, дважды щелкнув каждую из четырех кнопок. При двойном щелчке кнопки также добавляется автоматически созданный код в файл кода конструктора, который позволяет нажать кнопку для вызова события.

Добавление кода для логики формы NewCustomer

Чтобы завершить логику формы NewCustomer, выполните следующие действия.

Перенесите System.Data.SqlClient пространство имен в область, чтобы не указывать полные имена его членов.

Добавьте в класс некоторые переменные и вспомогательные методы, как показано в следующем коде.

Заполните основные тексты методов для четырех обработчиков событий нажатия кнопки, как показано в следующем коде.

Форма FillOrCancel

Создание автоматически создаваемых обработчиков событий

Создайте пустые обработчики событий щелчка для четырех кнопок в форме Филлорканцел, дважды щелкнув кнопки. При двойном щелчке кнопки также добавляется автоматически созданный код в файл кода конструктора, который позволяет нажать кнопку для вызова события.

Добавление кода для логики формы Филлорканцел

Чтобы завершить логику формы Филлорканцел, выполните следующие действия.

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

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

Заполните основные тексты методов для четырех обработчиков событий нажатия кнопки, как показано в следующем коде.

Тестирование приложения

Нажмите клавишу F5 для сборки и тестирования приложения после написания кода для каждого обработчика события нажатия кнопки и общего кода программы.

Источник

Accessing Data from a database is one of the important aspects of any programming language. It is an absolute necessity for any programming language to have the ability to work with databases. C# is no different.

It can work with different types of databases. It can work with the most common databases such as Oracle and Microsoft SQL Server.

C# and .Net can work with a majority of databases, the most common being Oracle and Microsoft SQL Server. But with every database, the logic behind working with all of them is mostly the same.

In our examples, we will look at working the Microsoft SQL Server as our database. For learning purposes, one can download and use the Microsoft SQL Server Express Edition, which is a free database software provided by Microsoft.

In working with databases, the following are the concepts which are common to all databases.

  • Connection – To work with the data in a database, the first obvious step is the connection. The connection to a database normally consists of the below-mentioned parameters.
    1. Database name or Data Source – The first important parameter is the database name to which the connection needs to be established. Each connection can only work with one database at a time.
    2. Credentials – The next important aspect is the username and password which needs to be used to establish a connection to the database. It ensures that the username and password have the necessary privileges to connect to the database.
    3. Optional parameters – For each database type, you can specify optional parameters to provide more information on how .net should handle the connection to the database. For example, one can specify a parameter for how long the connection should stay active. If no operation is performed for a specific period of time, then the parameter would determine if the connection has to be closed.
  • Selecting data from the database – Once the connection has been established, the next important aspect is to fetch the data from the database. C# can execute ‘SQL’ select command against the database. The ‘SQL’ statement can be used to fetch data from a specific table in the database.
  • Inserting data into the database – C# can also be used to insert records into the database. Values can be specified in C# for each row that needs to be inserted into the database.
  • Updating data into the database – C# can also be used to update existing records into the database. New values can be specified in C# for each row that needs to be updated into the database.
  • Deleting data from a database – C# can also be used to delete records into the database. Select commands to specify which rows need to be deleted can be specified in C#.
  • Ok, now that we have seen the theory of each operation, let’s jump into the further sections to look at how we can perform database operations in C#.

    SQL Command in c#

    SqlCommand in C# allow the user to query and send the commands to the database. SQL command is specified by the SQL connection object. Two methods are used, ExecuteReader method for results of query and ExecuteNonQuery for insert, Update, and delete commands. It is the method that is best for the different commands.

    Let’s now look at the code, which needs to be kept in place to create a connection to a database. In our example, we will connect to a database which has the name of Demodb. The credentials used to connect to the database are given below

    • Username – sa
    • Password – demo123

    We will see a simple Windows forms application to work with databases. We will have a simple button called “Connect” which will be used to connect to the database.

    So let’s follow the below steps to achieve this

    Step 1) The first step involves the creation of a new project in Visual Studio. After launching Visual Studio, you need to choose the menu option New->Project.

    C# Access Database

    Step 2) The next step is to choose the project type as a Windows Forms application. Here, we also need to mention the name and location of our project.

    C# Access Database

    1. In the project dialog box, we can see various options for creating different types of projects in Visual Studio. Click the Windows option on the left-hand side.
    2. When we click the Windows options in the previous step, we will be able to see an option for Windows Forms Application. Click this option.
    3. We then give a name for the application which in our case is “DemoApplication”. We also need to provide a location to store our application.
    4. Finally, we click the ‘OK’ button to let Visual Studio to create our project.

    Step 3) Now add a button from the toolbox to the Windows form. Put the text property of the Button as Connect. This is how it will look like

    C# Access Database

    Step 4) Now double click the form so that an event handler is added to the code for the button click event. In the event handler, add the below code.

    C# Access Database

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace DemoApplication1
    {
     public partial class Form1 : Form
     {
      public Form1()
      {
       InitializeComponent();
      }
    
      private void button1_Click(object sender, EventArgs e)
      {
       string connetionString;
       SqlConnection cnn;
       connetionString = @"Data Source=WIN-50GP30FGO75;Initial Catalog=Demodb;User ID=sa;Password=demol23";
       cnn = new SqlConnection(connetionString);
       cnn.Open();
       MessageBox.Show("Connection Open  !");
       cnn.Close();
      }
     }
    }

    Code Explanation:-

    1. The first step is to create variables, which will be used to create the connection string and the connection to the SQL Server database.
    2. The next step is to create the connection string. The connecting string needs to be specified correctly for C# to understand the connection string. The connection string consists of the following parts
      1. Data Source – This is the name of the server on which the database resides. In our case, it resides on a machine called WIN- 50GP30FGO75.
      2. The Initial Catalog is used to specify the name of the database
      3. The UserID and Password are the credentials required to connect to the database.
    3. Next, we assign the connecting string to the variable cnn. The variable cnn, which is of type SqlConnection is used to establish the connection to the database.
    4. Next, we use the Open method of the cnn variable to open a connection to the database. We then just display a message to the user that the connection is established.
    5. Once the operation is completed successfully, we then close the connection to the database. It is always a good practice to close the connection to the database if nothing else is required to be done on the database.

    When the above code is set, and the project is executed using Visual Studio, you will get the below output. Once the form is displayed, click the Connect button.

    Output:-

    C# Access Database

    When you click on “connect” button, from the output, you can see that the database connection was established. Hence, the message box was displayed.

    Access data with the SqlDataReader

    To showcase how data can be accessed using C#, let us assume that we have the following artifacts in our database.

    1. A table called demotb. This table will be used to store the ID and names of various Tutorials.
    2. The table will have 2 columns, one called “TutorialID” and the other called “TutorialName.”
    3. For the moment, the table will have 2 rows as shown below.
    TutorialID TutorialName
    1 C#
    2 ASP.Net

    Let’s change the code in our form, so that we can query for this data and display the information via a Messagebox. Note that all the code entered below is a continuation of the code written for the data connection in the previous section.

    Step 1) Let’s split the code into 2 parts so that it will be easy to understand for the user.

    • The first will be to construct our “select” statement, which will be used to read the data from the database.
    • We will then execute the “select” statement against the database and fetch all the table rows accordingly.

    C# Access Database

    Code Explanation:-

    1. The first step is to create the following variables
      1. SQLCommand – The ‘SQLCommand’ is a class defined within C#. This class is used to perform operations of reading and writing into the database. Hence, the first step is to make sure that we create a variable type of this class. This variable will then be used in subsequent steps of reading data from our database.
      2. The DataReader object is used to get all the data specified by the SQL query. We can then read all the table rows one by one using the data reader.
      3. We then define 2 string variables, one is “SQL” to hold our SQL command string. The next is the “Output” which will contain all the table values.
    2. The next step is to define the SQL statement, which will be used against our database. In our case, it is “Select TutorialID, TutorialName from demotb”. This will fetch all the rows from the table demotb.
    3. Next, we create the command object which is used to execute the SQL statement against the database. In the SQL command, you have to pass the connection object and the SQL string.
    4. Next, we will execute the data reader command, which will fetch all the rows from the demotb table.
    5. Now that we have all the rows of the table with us, we need a mechanism to access the row one by one. For this, we will use the while statement. The while statement will be used to access the rows from the data reader one at a time. We then use the GetValue method to get the value of TutorialID and TutorialName.

    Step 2) In the final step, we will just display the output to the user and close all the objects related to the database operation.

    C# Access Database

    Code Explanation:-

    1. We will continue our code by displaying the value of the Output variable using the MessageBox. The Output variable will contain all the values from the demotb table.
    2. We finally close all the objects related to our database operation. Remember this is always a good practice.

    When the above code is set, and the project is run using Visual Studio, you will get the below output. Once the form is displayed, click the Connect button.

    Output:-

    C# Access Database

    From the output, you can clearly see that the program was able to get the values from the database. The data is then displayed in the message box.

    C# Insert Into Database

    Just like Accessing data, C# has the ability to insert records into the database as well. To showcase how to insert records into our database, let’s take the same table structure which was used above.

    TutorialID TutorialName
    1 C#
    2 ASP.Net

    Let’s change the code in our form, so that we can insert the following row into the table

    TutorialID TutorialName
    3 VB.Net

    So let’s add the following code to our program. The below code snippet will be used to insert an existing record in our database.

    C# Access Database

    Code Explanation:-

    1. The first step is to create the following variables
      1. SQLCommand – This data type is used to define objects which are used to perform SQL operations against a database. This object will hold the SQL command which will run against our SQL Server database.
      2. The DataAdapter object is used to perform specific SQL operations such as insert, delete and update commands.
      3. We then define a string variable, which is “SQL” to hold our SQL command string.
    2. The next step is to actually define the SQL statement which will be used against our database. In our case, we are issuing an insert statement, which will insert the record of TutorialID=1 and TutorialName=VB.Net
    3. Next, we create the command object which is used to execute the SQL statement against the database. In the SQL command, you have to pass the connection object and the SQL string
    4. In our data adapter command, we now associate the insert SQL command to our adapter. We also then issue the ExecuteNonQuery method which is used to execute the Insert statement against our database. The ‘ExecuteNonQuery’ method is used in C# to issue any DML statements against the database. By DML statements, we mean the insert, delete, and update operation. In C# , if you want to issue any of these statements against a table, you need to use the ExecuteNonQuery method.
    5. We finally close all the objects related to our database operation. Remember this is always a good practice.

    When the above code is set, and the project is executed using Visual Studio, you will get the below output. Once the form is displayed, click the Connect button.

    Output:-

    C# Access Database

    If you go to SQL Server Express and see the rows in the demotb table, you will see the row inserted as shown below

    C# Access Database

    C# Update Database

    Just like Accessing data, C# has the ability to update existing records from the database as well. To showcase how to update records into our database, let’s take the same table structure which was used above.

    TutorialID TutorialName
    1 C#
    2 ASP.Net
    3 VB.Net

    Let’s change the code in our form, so that we can update the following row. The old row value is TutorialID as “3” and Tutorial Name as “VB.Net”. Which we will update it to “VB.Net complete” while the row value for Tutorial ID will remain same.

    Old row

    TutorialID TutorialName
    3 VB.Net

    New row

    TutorialID TutorialName
    3 VB.Net complete

    So let’s add the following code to our program. The below code snippet will be used to update an existing record in our database.

    C# Access Database

    C# SqlCommand Example With Code Explanation:-

    1. The first step is to create the following variables
      1. SQLCommand – This data type is used to define objects which are used to perform SQL operations against a database. This object will hold the SQL command which will run against our SQL Server database.
      2. The dataadapter object is used to perform specific SQL operations such as insert, delete and update commands.
      3. We then define a string variable, which is SQL to hold our SQL command string.
    2. The next step is to define the SQL statement which will be used against our database. In our case we are issuing an update statement, this will update the Tutorial name to “VB.Net Complete” while the TutorialID is unchanged and kept as 3.
    3. Next, we will create the command object, which is used to execute the SQL statement against the database. In the SQL command, you have passed the connection object and the SQL string.
    4. In our data adapter command, we now associate the insert SQL command to our adapter. We also then issue the ExecuteNonQuery method which is used to execute the Update statement against our database.
    5. We finally close all the objects related to our database operation. Remember this is always a good practice.

    When the above code is set, and the project is executed using Visual Studio, you will get the below output. Once the form is displayed, click the Connect button.

    Output:-

    C# Access Database

    If you actually go to SQL Server Express and see the rows in the demotb table, you will see the row was successfully updated as shown below.

    C# Access Database

    Deleting Records

    Just like Accessing data, C# has the ability to delete existing records from the database as well. To showcase how to delete records into our database, let’s take the same table structure which was used above.

    TutorialID TutorialName
    1 C#
    2 ASP.Net
    3 VB.Net complete

    Let’s change the code in our form, so that we can delete the following row

    TutorialID TutorialName
    3 VB.Net complete

    So let’s add the following code to our program. The below code snippet will be used to delete an existing record in our database.

    C# Access Database

    Code Explanation:-

    1. The Key difference in this code is that we are now issuing the delete SQL statement. The delete statement is used to delete the row in the demotb table in which the TutorialID has a value of 3.
    2. In our data adapter command, we now associate the insert SQL command to our adapter. We also then issue the ExecuteNonQuery method which is used to execute the Delete statement against our database.

    When the above code is set, and the project is executed using Visual Studio, you will get the below output. Once the form is displayed, click the Connect button.

    Output:-

    C# Access Database

    If you actually go to SQL Server Express and see the rows in the demotb table, you will see the row was successfully deleted as shown below.

    C# Access Database

    Connecting Controls to Data

    In the earlier sections, we have seen how to we can use C# commands such as SQLCommand and SQLReader to fetch data from a database. We also saw how we read each row of the table and use a messagebox to display the contents of a table to the user.

    But obviously, users don’t want to see data sent via message boxes and would want better controls to display the data. Let’s take the below data structure in a table

    TutorialID TutorialName
    1 C#
    2 ASP.Net
    3 VB.Net complete

    From the above data structure, the user would ideally want to see the TutorialID and Tutorial Name displayed in a textbox. Secondly, they might want to have some sort of button control which could allow them to go to the next record or to the previous record in the table. This would require a bit of extra coding from the developer’s end.

    The good news is that C# can reduce the additional coding effort by allowing binding of controls to data. What this means is that C# can automatically populate the value of the textbox as per a particular field of the table.

    So, you can have 2 textboxes in a windows form. You can then link one text box to the TutorialID field and another textbox to the TutorialName field. This linking is done in the Visual Studio designer itself, and you don’t need to write extra code for this.

    Visual Studio will ensure that it writes the code for you to ensure the linkage works. Then when you run your application, the textbox controls will automatically connect to the database, fetch the data and display it in the textbox controls. No coding is required from the developer’s end to achieve this.

    Let’s look at a code example of how we can achieve binding of controls.

    In our example, we are going to create 2 textboxes on the windows form. They are going to represent the Tutorial ID and Tutorial Name respectively. They will be bound to the Tutorial ID and TutorialName fields of the database accordingly.

    Let’s follow the below-mentioned steps to achieve this.

    Step 1) Construct the basic form. In the form drag and drop 2 components- labels and textboxes. Then carry out the following substeps

    1. Put the text value of the first label as TutorialID
    2. Put the text value of the second label as TutorialName
    3. Put the name property of the first textbox as txtID
    4. Put the name property of the second textbox as txtName

    Below is the how the form would look like once the above-mentioned steps are performed.

    C# Access Database

    Step 2) The next step is to add a binding Navigator to the form. The binding Navigator control can automatically navigate through each row of the table. To add the binding navigator, just go to the toolbox and drag it to the form.

    C# Access Database

    Step 3) The next step is to add a binding to our database. This can be done by going to any of the Textbox control and clicking on the DataBindings->Text property. The Binding Navigator is used to establish a link from your application to a database.

    When you perform this step, Visual Studio will automatically add the required code to the application to make sure the application is linked to the database. Normally the database in Visual Studio is referred to as a Project Data Source. So to ensure the connection is established between the application and the database, the first step is to create a project data source.

    The following screen will show up. Click on the link- “Add Project Data Source”. When you click on the project data source, you will be presented with a wizard; this will allow you to define the database connection.

    C# Access Database

    Step 4) Once you click on the Add Project Data Source link, you will be presented with a wizard which will be used to create a connection to the demotb database. The following steps show in detail what needs to be configured during each step of the wizard.

    1. In the screen which pops up , choose the Data Source type as Database and then click on next button.

    C# Access Database

    1. In the next screen, you need to start the creation of the connection string to the database. The connection string is required for the application to establish a connection to the database. It contains the parameters such as server name, database name, and the name of the driver.
      1. Click on the New connection button
      2. Choose the Data Source as Microsoft SQL Server
      3. Click the Continue button.

    C# Access Database

    1. Next, you need to add the credentials to connect to the database
      1. Choose the server name on which the SQL Server resides
      2. Enter the user id and password to connect to the database
      3. Choose the database as demotb
      4. Click the ‘ok’ button.

    C# Access Database

    1. In this screen, we will confirm all the settings which were carried on the previous screens.
      1. Choose the option “Yes” to include sensitive data in the connection string
      2. Click on the “Next” button.

    C# Access Database

    1. In the next screen, click on the “Next” button to confirm the creation of the connection string

    C# Access Database

    1. In this step,
    1. Choose the tables of Demotb, which will be shown in the next screen.
    2. This table will now become an available data source in the C# project

    C# Access Database

    When you click the Finish button, Visual Studio will now ensure that the application can query all the rows in the table Demotb.

    Step 5) Now that the data source is defined, we now need to connect the TutorialID and TutorialName textbox to the demotb table. When you click on the Text property of either the TutorialID or TutorialName textbox, you will now see that the binding source to Demotb is available.

    For the first text box choose the Tutorial ID. Repeat this step for the second textbox and choose the field as TutorialName. The below steps shows how we can navigate to each control and change the binding accordingly.

    1. Click on the Tutorial ID control.

    C# Access Database

    1. In the Properties window, you will see the properties of the TutorialID textbox. Go to the text property and click on the down arrow button.

    C# Access Database

    1. When you click the down arrow button, you will see the demotbBinding Source option. And under this, you will see the options of TutorialName and TutorialID. Choose the Tutorial ID one.

    C# Access Database

    Repeat the above 3 steps for the Tutorial Name text box.

    1. So click on the Tutorial Name text box
    2. Go to the properties window
    3. Choose the Text property
    4. Choose the TutorialName option under demotbBindingSource

    Step 6) Next we need to change the Binding Source property of the BindingNavigator to point to our Demotb data source. The reason we do this is that the Binding Navigator also needs to know which table it needs to refer to.

    The Binding Navigator is used to select the next or previous record in the table. So even though the data source is added to the project as a whole and to the text box control, we still need to ensure the Binding Navigator also has a link to our data source. In order to do this, we need to click the Binding navigator object, go to the Binding Source property and choose the one that is available

    C# Access Database

    Next, we need to go to the Properties window so that we can make the change to Binding Source property.

    C# Access Database

    When all of the above steps are executed successfully, you will get the below-mentioned output.

    Output:-

    C# Access Database

    Now when the project is launched, you can see that the textboxes automatically get the values from the table.

    C# Access Database

    When you click the Next button on the Navigator, it automatically goes to the next record in the table. And the values of the next record automatically come in the text boxes

    C# DataGridView

    Data Grids are used to display data from a table in a grid-like format. When a user sees’s table data, they normally prefer seeing all the table rows in one shot. This can be achieved if we can display the data in a grid on the form.

    C# and Visual Studio have inbuilt data grids, this can be used to display data. Let’s take a look at an example of this. In our example, we will have a data grid, which will be used to display the Tutorial ID and Tutorial Name values from the demotb table.

    Step 1) Drag the DataGridView control from the toolbox to the Form in Visual Studio. The DataGridView control is used in Visual Studio to display the rows of a table in a grid-like format.

    C# Access Database

    Step 2) In the next step, we need to connect our data grid to the database. In the last section, we had created a project data source. Let’s use the same data source in our example.

    1. First, you need to choose the grid and click on the arrow in the grid. This will bring up the grid configuration options.
    2. In the configuration options, just choose the data source as demotbBindingSource which was the data source created in the earlier section.

    C# Access Database

    If all the above steps are executed as shown, you will get the below-mentioned output.

    Output:-

    C# Access Database

    From the output, you can see that the grid was populated by the values from the database.

    Summary

    • C# SQL can work with databases such as Oracle and Microsoft SQL Server.
    • This C# database tutorial has all the commands which are required to work with databases. This involves establishing a connection to the database. You can perform operations such as select, update, insert and delete using the commands in C#.
    • The DataReader object in C# is used to hold all the data returned by the database. The While loop in C# can be used to read the data rows one at a time.
    • The data adapter object is used to perform SQL operations such as insert, delete, and update against the database.
    • C# can bind controls to the various fields in a table. They are bound by defining a data source in C#. The data source is used to pull the data from the database and populate them in the controls.
    • The binding navigator is used to automatically navigate through the rows in a table.
    • The data grid in C# can connect to the database and display all the values from the table in a grid-like format.

    В данной статье рассмотрим работу с SQLite из программы на языке C#. Основное внимание будет уделено конфигурированию проекта в MS Visual Studio для работы с SQLite, созданию базы данных, созданию таблиц и работе с таблицами: чтение/запись данных.

    Исходный код доступен на GitHub.

    Если кратко, то SQLite – это кроссплатформенная встраиваемая СУБД. Свойство кроссплатформенности я думаю пояснять не нужно, а вот с понятием “встраиваемая” наверное стоит немного разобраться. Существуют СУБД, которые представляют собой клиент-серверное приложение – это наиболее знакомый вариант. Например Microsoft SQL Server, MySQL, PostgreSQL, различные NoSQL варианты, которых на сегодняшний день появилось огромное количество. Суть их в том, что есть выделенное приложение – сервер, которое принимает запросы от клиентов и выполняет их, оно непосредственно занимается записью/чтением данных на диск и предоставляет различные функции типа репликации и т.п. Встраиваемая СУБД не имеет выделенного сервера, ее движок включается в приложение в виде библиотеки и предоставляет доступ к базе через специализированный API.

    На сегодняшний день SQLite является одной из самых популярных решений такого типа. Она используется практически повсеместно: в embedded приложениях, мобильных телефонах, различных платформах и т.д. Например браузер Google Chrome использует SQLite для хранения Cookies. SQLite обладает феноменальной надежностью (зачастую в ущерб производительности, если её неправильно “готовить”), поэтому, несмотря на то, что она является открытой, разработчики практически не принимают сообщения об ошибках.

    Первое, что необходимо сделать для начала работы с SQLite – это скачать его с официального сайта (ссылка). Для приложений на платформе .NET есть возможность работать с SQLite через ADO.NET провайдер под названием System.Data.SQLite. Зайдя на страницу загрузки новичок будет наверное сбит с толку обилием возможных вариантов System.Data.SQLite. Попробуем разобраться.

    Необходимо знать:

    • если в названии пакета для скачивания нет слова “static”, то это значит, что на машине разработчика и пользователя приложения должна стоять Microsoft Visual C++ Runtime Library (2005, 2008, 2010, 2012, 2013 или 2015).
    • если в названии есть слово “setup”, то он включает в себя и автоматически устанавливает на машину Microsoft Visual C++ Runtime Library.
    • пакет со словом “bundle”, используется в том случае, если библиотеки необходимо разместить в  Global Assembly Cache

    Сами разработчики рекомендуют брать во внимание следующие моменты при выборе дистрибутива SQLite:

    • рекомендуется использовать XCOPY развертывание (простое копирование файлов) с автоматической подгрузкой нужных библиотек (определятся разрядностью процессора) (Native Library Pre-Loading);
    • использовать вариант работы с  Global Assembly Cache не рекомендуется, поэтому пакет со словом “bundle” качаем если только это действительно необходимо;
    • использовать пакет со словом “static” на машине разработчика не рекомендуется, и вообще не стоит устанавливать такой пакет, если на машине развернута Microsoft Visual C++ Runtime Library;
    • используется пакет с версией .NET, которая используется в вашем приложении;
    • следите за тем, чтобы версия архитектуры процессора пакета и целевой машины совпадали.

    Структура папки, в которой располагается приложение, для поддержки режима автоматической подгрузки нужных библиотек (Native Library Pre-Loading) представлена ниже

    • <bin>App.exe (опционально, приложение)
    • <bin>App.dll (опционально, библиотека приложения)
    • <bin>System.Data.SQLite.dll (требуется, core сборка)
    • <bin>System.Data.SQLite.Linq.dll (опционально, LINQ сборка)
    • <bin>System.Data.SQLite.EF6.dll (опционально, EF6 сборка)
    • <bin>x86SQLite.Interop.dll (требуется, x86 native interop сборка)
    • <bin>x64SQLite.Interop.dll (требуется, x64 native interop сборка)

    Работа с SQLite из C#

    Создадим простое приложение, демонстрирующее работу с SQLite СУБД. В качестве среды разработки будем использовать Visual Studio 2015 Community Edition.

    Подготовка

    Первое, что мы сделаем, это скачаем с официального сайта пакеты Precompiled Binaries for 64-bit Windows (.NET Framework 4.0) и Precompiled Binaries for 32-bit Windows (.NET Framework 4.0). На момент написания статьи это была версия sqlite-netFx40-binary-x64-2010-1.0.101.0.zip и sqlite-netFx40-binary-Win32-2010-1.0.101.0.zip

    В Visual Studio создадим проект Windows Forms Application с именем SQLiteSample.

    После этого необходимо собрать проект, для того, чтобы IDE создала необходимый набор каталогов. В нашем случае интерес представляет binDebug. В него добавим необходимый набор файлов, как показано выше в описании структуры папок при использовании подхода Native Library Pre-Loading.

    Добавим в проект ссылку на библиотеку System.Data.SQLite.dll, предварительно скопировав ее в папку SQLiteSampleSQLiteSamplelib. Для этого на панели меню выбрать Project/Add Reference… В открывшемся окне нажать кнопку Browse… и выбрать файл System.Data.SQLite.dll. Что привет к появлению нового Reference в окне Solution Explorer.

    sqlite_c_sharp_pic1

    Приложение будет представлять собой форму для работы с базой данных, содержащей имена писателей и названия их произведений. Внешний вид представлен на рисунке ниже.

    sqlite_c_sharp_pic2

    На панели инструментов имеются несколько кнопок:

    • Create – создание БД и таблицы, если они ещё пока не создана;
    • Connect – подключение к БД;
    • Read all – считать все записи из таблицы;
    • Clear table – очистить таблицу формы;
    • Add – добавить запись.

    В строке состояния отображается статус:

    • Disconnected – нет связи с БД;
    • Connected – есть связь с БД.

    Создание базы данных, таблиц и работа с данными

    Сейчас более подробно рассмотрим процессы создания базы данных, таблиц и работы с записями таблицы (чтение и добавление). Каждая из этих задач будет решаться в рамках метода, вызываемого при нажатии на соответствующую кнопку.

    Предварительно подключим в нашем проекте пространство имен System.Data.SQLite и добавим переменные для связи с базой данных. Таким образом наша программа будет иметь вид.

    using System;
    using System.Windows.Forms;
    
    using System.Data.SQLite;
    using System.IO;
    using System.Data;
    
    namespace SQLiteSample
    {
        public partial class Form1 : Form
        {
            private String dbFileName;
            private SQLiteConnection m_dbConn;
            private SQLiteCommand m_sqlCmd;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                m_dbConn = new SQLiteConnection();
                m_sqlCmd = new SQLiteCommand();
    
                dbFileName = "sample.sqlite";
                lbStatusText.Text = "Disconnected";
            }
        }
    }
    
    

    Создание БД и таблицы

    Создание БД и таблицы в “SQLite Sample”, если они ещё не созданы, осуществляется при нажатии на кнопку Create.

    private void btCreate_Click(object sender, EventArgs e)
    {
        if (!File.Exists(dbFileName))
            SQLiteConnection.CreateFile(dbFileName);
    
        try
        {
            m_dbConn = new SQLiteConnection("Data Source=" + dbFileName + ";Version=3;");
            m_dbConn.Open();
            m_sqlCmd.Connection = m_dbConn;
    
            m_sqlCmd.CommandText = "CREATE TABLE IF NOT EXISTS Catalog (id INTEGER PRIMARY KEY AUTOINCREMENT, author TEXT, book TEXT)";                
            m_sqlCmd.ExecuteNonQuery();
    
            lbStatusText.Text = "Connected";
        }
        catch (SQLiteException ex)
        {
            lbStatusText.Text = "Disconnected";
            MessageBox.Show("Error: " + ex.Message);
        }           
    }
    

    В данном методе, мы сначала проверяем, существует ли файл с именем “sample.sqlite” (переменная dbFileName), если его нет, то создаем. Этот файл фактически и является базой данных.

    После этого мы подключаемся к созданной БД:

    m_dbConn = new SQLiteConnection("Data Source=" + dbFileName + ";Version=3;");
    m_dbConn.Open();
    

    Для выполнения SQL команд будем использовать переменную m_sqlCmd, чтобы это стало возможным в первую очередь зададим объект класса  SqlConnection, используемый SQLiteCommand:

    m_sqlCmd.Connection = m_dbConn;
    

    После выполним запрос на создание таблицы:

    m_sqlCmd.CommandText = "CREATE TABLE IF NOT EXISTS Catalog (id INTEGER PRIMARY KEY AUTOINCREMENT, author TEXT, book TEXT)";                
    m_sqlCmd.ExecuteNonQuery();
    

    Подключение к уже существующей таблице

    Подключение к уже существующей таблице осуществляется при нажатии на кнопку Connect. Код метода очень похож на тот, что мы разбирали выше, поэтому на нем мы останавливаться не будем.

    private void btConnect_Click(object sender, EventArgs e)
    {
        if (!File.Exists(dbFileName))
            MessageBox.Show("Please, create DB and blank table (Push "Create" button)");
    
        try
        {
            m_dbConn = new SQLiteConnection("Data Source=" + dbFileName + ";Version=3;");
            m_dbConn.Open();
            m_sqlCmd.Connection = m_dbConn;
                           
            lbStatusText.Text = "Connected";
        }
        catch (SQLiteException ex)
        {
            lbStatusText.Text = "Disconnected";
            MessageBox.Show("Error: " + ex.Message);
        }           
    }
    

    Чтение данных

    Чтение данных осуществляется при нажатии на кнопку Read all, при этом из существующей БД считываются все данные и выводятся в таблицу.

    private void btReadAll_Click(object sender, EventArgs e)
    {
        DataTable dTable = new DataTable();
        String sqlQuery;
    
        if (m_dbConn.State != ConnectionState.Open)
        {
            MessageBox.Show("Open connection with database");
            return;
        }
        
        try
        {
            sqlQuery = "SELECT * FROM Catalog";
            SQLiteDataAdapter adapter = new SQLiteDataAdapter(sqlQuery, m_dbConn);
            adapter.Fill(dTable);
    
            if (dTable.Rows.Count > 0)
            {
                dgvViewer.Rows.Clear();
    
                for (int i = 0; i < dTable.Rows.Count; i++)
                    dgvViewer.Rows.Add(dTable.Rows[i].ItemArray);
            }
            else
                MessageBox.Show("Database is empty");
        }
        catch (SQLiteException ex)
        {               
            MessageBox.Show("Error: " + ex.Message);
        }           
    }       
    
    

    Разберем этот метод более подробно. Первое, что необходимо сделать, это проверить наличие связи с БД:

    if (m_dbConn.State != ConnectionState.Open)
    {
        MessageBox.Show("Open connection with database");
        return;
    }
    

    Данные, считанные из базы, мы будем помещать в таблицу DataTable, а из неё будем из перегружать в элемент DataGridView, расположенный на нашей форме. Для этого создадим SQL запрос и адаптер, который будет выполнять запрос и передавать полученные от СУБД данные в таблицу

    sqlQuery = "SELECT * FROM Catalog";
    SQLiteDataAdapter adapter = new SQLiteDataAdapter(sqlQuery, m_dbConn);
    adapter.Fill(dTable);
    

    Если таблица не пуста, перенесем данные из нее в элемент dgvViewer.

    if (dTable.Rows.Count > 0)
    {
        dgvViewer.Rows.Clear();
    
        for (int i = 0; i < dTable.Rows.Count; i++)
            dgvViewer.Rows.Add(dTable.Rows[i].ItemArray);
    }
    else
        MessageBox.Show("Database is empty");
    
    

    Добавление данных в БД

    Добавление данных в БД осуществляется при нажатии на кнопку Add. При этом будет вызван соответствующий метод.

    private void btAdd_Click(object sender, EventArgs e)
    {
        if (m_dbConn.State != ConnectionState.Open)
        {
            MessageBox.Show("Open connection with database");
            return;
        }
    
        AddDataToDb addData = new AddDataToDb();
        if (addData.ShowDialog() == DialogResult.OK)
        {
            try
            {
                m_sqlCmd.CommandText = "INSERT INTO Catalog ('author', 'book') values ('" +
                    addData.Author + "' , '" +
                    addData.Book + "')";
    
                m_sqlCmd.ExecuteNonQuery();                    
            }
            catch (SQLiteException ex)
            {                    
                MessageBox.Show("Error: " + ex.Message);
            }
        }
    }
    

    В нем мы также, вначале проверяем, есть ли связь с БД, после этого создает диалоговое окно для ввода имени автора и названия произведения.

    AddDataToDb addData = new AddDataToDb();
    if (addData.ShowDialog() == DialogResult.OK)
    {...}
    

    Если окно было закрыто по кнопку OK, то записываем введенные данные в БД

    try
    {
        m_sqlCmd.CommandText = "INSERT INTO Catalog ('author', 'book') values ('" +
            addData.Author + "' , '" +
            addData.Book + "')";
    
        m_sqlCmd.ExecuteNonQuery();                    
    }
    
    

    На этом можно завершить описание базовых понятий и методов работы с СУБД SQLite.

    Спасибо за внимание!

    Понравилась статья? Поделить с друзьями:
  • Работа с dism в windows 10
  • Р7 офис профессиональный скачать для windows с ключем активації
  • Работа с wireshark для windows 10
  • Работа с bat файлами windows 10
  • Пять звуковых сигналов ноутбук dell даже в windows