Обращение к базам данных из программы, написанной на языке C#

Далее в трех примерах программ на C# мы будем использовать классы Connection, Command, DataReader, DataAdapter. Префиксы Sql и OleDb указывают на то, с каким вариантом базы данных Planets мы работаем.
Пример программы 12
Следующая программа подключается к базе данных и посылает ей SQL-запрос. Затем выполняется несколько циклов получения результата запроса, после чего полученные результаты передаются в элемент управления ListBox и отображаются в списке.
Код программы 12
using System.Windows.Forms; using System.Data;
// Пространство имен для работы с базами данных SQL Server using System.Data.SqlClient; using System.Drawing;
// Пространство имен для работы с базами данных Access using System.Data.OleDb; class SimpleDataAccess : Form
{ public SimpleDataAccess()
{
// Указываем заголовок окна this.Text = “Работа с базой данных. Чтение данных.”;
// Добавляем элементы управления – метку и список Label labelCaption = new Label(); labelCaption.Text = “Планеты солнечной системы!”; labelCaption.Location = new Point(30, 10); labelCaption.Width = 200; labelCaption.Parent = this;
ListBox listPlanets = new ListBox(); listPlanets.Location = new Point(30, 50); listPlanets.Width = 100; listPlanets.Parent = this;
// Формируем запрос к базе данных – //запрашиваем информацию о планетах string sql = “SELECT * FROM PLANET”; string connectionString;
/*
//Вариант 1
// Подключаемся к базе данных SQL Server Express Edition
// Указываем физический путь к базе данных PLANETS string dbLocation =
(“../../../databases/planets.mdf”);
connectionString = @”data source=.\SQLEXPRESS;” +
“User Instance=true;Integrated Security=SSPI;” +
“AttachDBFilename=” + dbLocation;
SqlConnection connection1 = new SqlConnection(connectionString); */
//Вариант 2
// Подключаемся к базе данных SQL Server 2005
connectionString =
“data source = localhost; Initial Catalog = Planets;” +
“Integrated Security = SSPI”;
SqlConnection connection1 = new SqlConnection(connectionString);
//Открываем соединение connection1.Open();
SqlCommand command1 = new SqlCommand(sql, connection1);
SqlDataReader dataReader1 = command1.ExecuteReader();
// Организуем циклический перебор полученных записей //и выводим название каждой планеты в список while (dataReader1.Read())
{ listPlanets.Items.Add(dataReader1[“PlanetName”]);
}
// Очистка dataReader1.Close(); connection1.Close(); /*
//Вариант 3. Связывание с базой данных Access 2003 – *.mdb connectionString = “Provider=Microsoft.Jet.OLEDB.4.0;” + @”Data Source= ../../../databases/planets.mdb”;
//Вариант 4. Связывание с базой данных Access 2007 – *.accdb connectionString = “Provider=Microsoft.Ace.OLEDB.12.0;” + @”Data Source= ../../../databases/planets.accdb”;
OleDbConnection connection = new OleDbConnection(connectionString); connection.Open();
OleDbCommand command = new OleDbCommand(sql, connection);
OleDbDataReader dataReader = command.ExecuteReader();
// Организуем циклический перебор полученных записей //и выводим название каждой планеты в список while (dataReader.Read())
{ listPlanets.Items.Add(dataReader[“PlanetName”]);
}
// Очистка dataReader.Close(); connection.Close();
* */ }
static void Main()
{
// Создаем и запускаем форму
Application.Run(new SimpleDataAccess()); }
}

Пример программы 13
В этой программе на экран выводится несколько столбцов данных. Для их представления мы воспользуемся элементом DataGridView.
Программа выполняет тот же запрос, что и в предыдущем примере, но помещает результат в объект DataSet, который подключается к элементу управления DataGridView, а тот автоматически отображает все данные.
Подключение источника данных к визуальному элементу управления называется привязкой, или связыванием данных.
Код программы 13
using System.Windows.Forms; using System.Data;
// Пространство имен для работы с базами данных SQL Server
using System.Data.SqlClient; using System.Drawing;
// Пространство имен для работы с базами данных Access using System.Data.OleDb; class DataInGrid : Form
{ public DataInGrid()
{
//Изменяем размеры формы this.Width = 450; this.Height = 400;
// Указываем заголовок окна
this.Text = “Одностороннее связывание:” + “ база данных и элемент Grid.”;
// Добавляем элементы управления – метку и таблицу Label labelCaption = new Label(); labelCaption.Text = “Планеты солнечной системы!”; labelCaption.Location = new Point(60, 10); labelCaption.Width = 200; labelCaption.Parent = this;
// Добавляем элемент DataGridView на форму
DataGridView dataGridView1 = new DataGridView(); dataGridView1.Width = 350; dataGridView1.Height = 250;
dataGridView1.Location = new Point(20, 50); dataGridView1.DataMember = “Table”; dataGridView1.AutoResizeColumns(); this.Controls.Add(dataGridView1);
// Формируем запрос к базе данных – //запрашиваем информацию о планетах string sql = “SELECT * FROM PLANET”; string connectionString;
// DataSet сохраняет данные в памяти
//данные хранятся в виде таблиц данных DataTable
DataSet dataSet1 = new DataSet();
/*
//Вариант 1
// Подключаемся к базе данных SQL Server Express Edition
// Указываем физический путь к базе данных PLANETS string dbLocation =
(“../../../databases/planets.mdf”);
connectionString = @”data source=.\SQLEXPRESS;” +
“User Instance=true;Integrated Security=SSPI;” +
“AttachDBFilename=” + dbLocation;
SqlConnection connection1 = new SqlConnection(connectionString);
*/
/*
//Вариант 2
// Подключаемся к базе данных SQL Server 2005 connectionString =
“data source = localhost; Initial Catalog = Planets;” +
“Integrated Security = SSPI”;
SqlConnection connection1 = new SqlConnection(connectionString);
//Открываем соединение connection1.Open();
// DataAdapter – посредник между базой данных и DataSet
SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter();
// Создаем объект DataAdapter, //передаем ему данные запроса sqlDataAdapter1.SelectCommand = new SqlCommand(sql, connection1);
// Данные из адаптера поступают в DataSet sqlDataAdapter1.Fill(dataSet1);
// Связываем данные с элементом DataGridView
DataGridView1.DataSource = dataSet1;
// Очистка connection1.Close(); * */
/*
//Вариант 3. Связывание с базой данных Access 2003 – *.mdb connectionString = “Provider=Microsoft.Jet.OLEDB.4.0;” + @”Data Source= ../../../databases/planets.mdb”;
*/
//Вариант 4. Связывание с базой данных Access 2007 – *.accdb connectionString = “Provider=Microsoft.Ace.OLEDB.12.0;” + @”Data Source= ../../../databases/planets.accdb”;
OleDbConnection connection = new OleDbConnection(connectionString); connection.Open();
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(); dataAdapter.SelectCommand = new OleDbCommand(sql, connection);
dataAdapter.Fill(dataSet1); dataGridView1.DataSource = dataSet1;
// Очистка connection.Close();
}
static void Main()
{
// Создаем и запускаем форму
Application.Run(new DataInGrid()); }
}

Пример программы 14
Научившись отображать данные с помощью элемента управления DataGridView, вы, наверное, обратили внимание, что внесенные в базу изменения не сохраняются. Поэтому применим другой подход и осуществим «двухстороннюю привязку данных», которая позволит не только просматривать открывшуюся таблицу, но и вводить изменения в элемент DataGridView, добавляя новые строки, изменяя содержимое имеющихся строк и удаляя ненужные. Объекты класса DataAdapter способны выполнять как операцию Select, получая данные запроса из базы данных, так и команды Insert, Update, Delete, изменяя содержимое таблицы базы данных.
Здесь мы позволим себе маленькую хитрость (это называется «повысить производительность труда») и не станем самостоятельно прописывать операторы UPDATE и INSERT. Пространство имен System.Data содержит небольшой, но очень полезный класс CommandBuilder, который умеет создавать команды SQL и автоматически их выполнять.
Код программы 14
using System; using System.Windows.Forms; using System.Data;
// Пространство имен для работы с базами данных SQL Server using System.Data.SqlClient; using System.Drawing; using System.Diagnostics; class DataInOutGrid: Form
{
SqlDataAdapter dataAdapter; DataGridView dataGridView;
public DataInOutGrid()
{
//Изменяем размеры формы this.Width = 450; this.Height = 400;
// Указываем заголовок окна
this.Text = “Двустороннее связывание:” + “ база данных и элемент Grid.”;
// Добавляем элементы управления –
//метку, таблицу и командную кнопку Label labelCaption = new Label(); labelCaption.Text = “Планеты!”; labelCaption.Location = new Point(60, 10); labelCaption.Width = 200; labelCaption.Parent = this;
// Добавляем элемент DataGridView на форму
dataGridView = new DataGridView(); dataGridView.Width = 350; dataGridView.Height = 250; dataGridView.Location = new Point(20, 50); dataGridView.AutoResizeColumns(); this.Controls.Add(dataGridView);
// Добавляем командную кнопку Button buttonSave = new Button(); buttonSave.Location = new Point(100, 320); buttonSave.Width = 220; buttonSave.Text = “Сохранить изменения в базе данных!”; buttonSave.Click += new System.EventHandler(ButtonSave_Click);
buttonSave.Parent = this;
// Формируем запрос к базе данных – //запрашиваем информацию о планетах string sql = “SELECT * FROM PLANET”; string connectionString;
// DataTable сохраняет данные в памяти как таблицу
DataTable dataTable = new DataTable();
/*
//Вариант 1
// Подключаемся к базе данных SQL Server Express Edition
// Указываем физический путь к базе данных PLANETS string dbLocation =
(“../../../databases/planets.mdf”);
connectionString = @”data source=.\SQLEXPRESS;” +
“User Instance=true;Integrated Security=SSPI;” +
“AttachDBFilename=” + dbLocation;
SqlConnection connection1 = new SqlConnection(connectionString); */
//Вариант 2
// Подключаемся к базе данных SQL Server 2005 connectionString =
“data source = localhost; Initial Catalog = Planets;” +
“Integrated Security = SSPI”;
SqlConnection connection = new SqlConnection(connectionString); //Открываем соединение connection.Open();
//Создаем команду
SqlCommand sqlCommand = new SqlCommand(sql, connection);
//Создаем адаптер
// DataAdapter – посредник между базой данных и DataSet dataAdapter = new SqlDataAdapter(sqlCommand);
//Создаем построитель команд
//Для адаптера становится доступной команда Update
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
// Данные из адаптера поступают в DataTable dataAdapter.Fill(dataTable);
// Связываем данные с элементом DataGridView dataGridView.DataSource = dataTable;
// Очистка connection.Close();
}
static void Main()
{
// Создаем и запускаем форму
Application.Run(new DataInOutGrid());
}
void ButtonSave_Click(object sender, System.EventArgs args)
{ try
{ dataAdapter.Update((DataTable)dataGridView.DataSource);
MessageBox.Show(“Изменения в базе данных выполнены!”,
“Уведомление о результатах”, MessageBoxButtons.OK);
} catch(Exception)
{
MessageBox.Show(“Изменения в базе данных выполнить не удалось!”,
“Уведомление о результатах”, MessageBoxButtons.OK);
}
}
}
На следующем рисунке показано содержимое базы данных, в которую добавлены две строки с названиями недавно открытых фантастических планет Солярис и Обитаемый остров (или коротко – Остров).

Поэкспериментируйте, изменяя существующие значения и вводя новые. Нажмите кнопку «Сохранить изменения» и закройте форму. Перезапустив программу, убедитесь, что все значения были сохранены в базе данных. Если вы работаете с Access, то измените код в соответствии с образцом, приведенным в программах Example 12 и Example 13.