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

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

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

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

Код программы 13a (для работы с SQL Express; для работы с Microsoft Access требуется версия 13b, имеющаяся на диске)

  using System. Windows. Forms;

  using System. Data;

  using System. Data. SqlClient;  // Пространство имен для работы с базами данных SQL Server

  class DataInGrid : Form

  {

  public DataInGrid()

  {

  // Указываем заголовок окна

  this. Text = "One-Way Database Grid Binding";

  // Указываем физический путь к базе данных PLANETS

  string dbLocation =

  System. IO. Path. GetFullPath("../../../database/SqlServer/planets. mdf");

  // Добавляем элемент DataGridView на форму

  DataGridView DataGridView1 = new DataGridView();

  DataGridView1.Width = this. Width;

  DataGridView1.Height = 250;

  DataGridView1.DataMember = "Table";

  DataGridView1.Dock = DockStyle. Fill;

  this. Controls. Add(DataGridView1);

  // Подключаемся к базе данных SQL Server

  SqlConnection connection1 = new SqlConnection

  (

  @"data source=.\SQLEXPRESS; +

  "User Instance=true;Integrated Security=SSPI;AttachDBFilename="

  + @dbLocation

  );

  connection1.Open();

  // DataSet сохраняет данные в памяти с помощью таблиц данных DataTable

  DataSet dataSet1 = new DataSet();

  // Объект DataAdapter является посредником при взаимодействии базы данных и объекта DataSet

  SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter();

  // Указываем объекту DataAdapter, какие данные он должен получить и откуда

  sqlDataAdapter1.SelectCommand =

  new SqlCommand("SELECT * FROM PLANET", connection1);

  // Теперь заполняем находящийся в памяти объект DataSet данными

  sqlDataAdapter1.Fill(dataSet1);

  // Привязываем элемент DataGridView (визуальную таблицу) к хранящимся в памяти данным

  DataGridView1.DataSource = dataSet1;

  // Закрываем подключение к базе данных

  connection1.Close();

  }

  static void Main()

  {

  // Запускаем новый экземпляр приложения Windows Forms при помощи вышеописанного класса

  Application. Run(new DataInGrid());

  }

  }

НЕ нашли? Не то? Что вы ищете?

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

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

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

Код программы 14a (для работы с SQL Express; для работы с Microsoft Access требуется версия 14b, имеющаяся на диске)

  using System. Windows. Forms;

  using System. Data;

  using System. Data. SqlClient;  // Пространство имен для работы с базами данных SQL Server

  class PlanetsForm : Form

  {

  // Объявляем объекты, к которым будем обращаться из разных методов

  DataGridView dg;

  SqlDataAdapter da;

  public PlanetsForm()

  // Метод-конструктор класса PlanetsForm

  {

  // Указываем заголовок окна

  this. Text = "Two-way Database Grid Binding";

  // Указываем физический путь к базе данных PLANETS

  string dbLocation =

  System. IO. Path. GetFullPath("../../../database/SqlServer/planets. mdf");

  // Подготавливаем подключение к базе данных SQL Server

  string connectionString =

  @"data source=.\SQLEXPRESS;" +

  "User Instance=true;Integrated Security=SSPI;AttachDBFilename="

  + @dbLocation;

  /* Добавляем на форму кнопку "Save" (Сохранить) */

  Button btnSave = new Button();

  btnSave. Text = "Save";

  btnSave. Click += new System. EventHandler(BtnSave_Click);

  btnSave. Dock = DockStyle. Top;

  this. Controls. Add(btnSave);

  /* Добавляем элемент DataGridView на форму */

  dg = new DataGridView();

  dg. Width = this. Width;

  dg. Height = 250;

  dg. Dock = DockStyle. Fill;

  this. Controls. Add(dg);

  /* Создаем экземпляры объектов для "умной" работы с данными и используем их

  вместе для привязки элемента DataGridView к требуемому источнику данных */

  // Объект DataAdapter выступает в роли посредника при взаимодействии базы данных и хранящегося в памяти объекта DataTable

  da = new SqlDataAdapter("SELECT * FROM PLANET", connectionString);

  // Объект CommandBuilder автоматически выполняет команды UPDATE и INSERT

  SqlCommandBuilder cb = new SqlCommandBuilder(da);

  // Объект DataTable отслеживает и сохраняет в памяти изменения

  DataTable dt = new DataTable();

  // Теперь заполняем объект DataTable данными

  da. Fill(dt);

  // Привязываем элемент управления DataGridView к объекту DataTable

  dg. DataSource = dt;

  }

  static void Main()

  {

  // Запускаем новый экземпляр приложения Windows Forms при помощи вышеописанного класса

  Application. Run(new PlanetsForm());

  }

  private void BtnSave_Click(object sender, System. EventArgs e)

  {

  // При нажатии кнопки "Save" в базе данных сохраняются любые изменения,

  // внесенные в источник данных, связанный с DataGridView, которым

  // в данном случае является объект DataTable

  da. Update((DataTable)dg. DataSource);

  MessageBox. Show

  ("Data has been saved", "For your information", MessageBoxButtons. OK);

  }

  }

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

Что делать, если SQL Server Express не установлен?

Если у вас не установлен Microsoft SQL Server и вы пользуетесь другой СУБД, вам потребуется внести в код небольшие поправки.

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

Строка подключения для базы данных SQL Server Express выглядит примерно так:

  string connectionString =

  "Integrated Security=SSPI;Persist Security Info=False; Initial

  Catalog=Northwind;Data Source=localhost";

или так, если подключение производится непосредственно к файлу базы данных (как в примерах из этой книги):

  string connectionString =

  @"data source=.\SQLEXPRESS;Integrated Security=SSPI;

  AttachDBFilename=c:\C#4#KIDS\examples\database\SqlServer\planets. mdf;

  User Instance=true”;

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

Строка подключения для базы данных Microsoft Access будет выглядеть примерно так:

  string connectionString =

  @"Provider=Microsoft. Jet. OLEDB.4.0; Data Source

  c:\C#4#KIDS\examples\database\Access\planets. mdb;";

(Как объяснялось ранее, выражение, стоящее в кавычках, должно записываться в одну строку.)

Для других баз данных приняты свои особые форматы строки подключения. Примеры можно найти в справочной документации по Visual C# Express или в документации по используемой вами СУБД.

Помимо изменения строки подключения потребуется заменить классы «SQL» на классы «OleDb».

Для начала необходимо включить пространство имен System. Data. OleDb вместо пространства имен System. Data. SqlClient. Оно содержит классы, предназначенные для работы с разнообразными базами данных.

using System. Data. OleDb;

Затем произведите замену классов для работы с данными, как указано ниже:

SQL Server

General Databases

SqlCommand

OleDbCommand

SqlCommandBuilder

OleDbCommandBuilder

SqlDataAdapter

OleDbDataAdapter

SqlConnection

OleDbConnection

Введение

Классы пространства имен System. Xml позволяют работать с XML-данными разными способами. Наиболее часто выполняются следующие задачи:

    открытие XML-документа; чтение фрагмента XML-данных для извлечения некоторых значений; сохранение XML-файла на диск.

Краткое введение в XML

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

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7