Информатика

Обращение к базам данных из программы, написанной на языке 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.

Main Aditor

Здравствуйте! Если у Вас возникнут вопросы, напишите нам на почту help@allinweb.info

Похожие статьи

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

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