Опубликован: 14.12.2009 | Доступ: свободный | Студентов: 29522 / 2925 | Оценка: 4.28 / 4.01 | Длительность: 06:01:00
ISBN: 978-5-9963-0236-9
Специальности: Программист, Преподаватель
Лекция 6:

Базы данных и XML

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >

Пример программы 4.3

Научившись отображать данные с помощью элемента управления DataGridView, вы, наверное, обратили внимание, что внесенные в базу изменения не сохраняются. Поэтому применим другой подход и осуществим "двухстороннюю привязку данных", которая позволит не только просматривать открывшуюся таблицу, но и вводить изменения в элемент DataGridView, добавляя новые строки, изменяя содержимое имеющихся строк и удаляя ненужные. Объекты класса DataAdapter способны выполнять как операцию Select, получая данные запроса из базы данных, так и команды Insert, Update, Delete, изменяя содержимое таблицы базы данных.

Здесь мы позволим себе маленькую хитрость (это называется "повысить производительность труда") и не станем самостоятельно прописывать операторы UPDATE и INSERT. Пространство имен System.Data содержит небольшой, но очень полезный класс CommandBuilder, который умеет создавать команды SQL и автоматически их выполнять.

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);
    }
  }
}
Листинг 4.3.

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


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

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >
Алексей Фролов
Алексей Фролов
Кристина Горбунова
Кристина Горбунова