Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР7.doc
Скачиваний:
16
Добавлен:
05.05.2019
Размер:
851.46 Кб
Скачать

Использование адаптера

В предыдущем разделе мы разобрали один из механизмов получения данных с SQL Server. Способ этот односторонний. Если вам необходимо изменить данные на сервере, то следует создавать отдельную команду для этой цели. Объект DataGridView, конечно, позволяет автоматически менять содержимое таблицы, с которой данный объект связан. Но ведь таблица находится в памяти клиентского приложения, а для того чтобы отправить изменения на сервер, придется писать отдельную процедуру. Данный процесс можно автоматизировать, если создать объект класса

System.Data.SqlClient.SqlDataAdapter,

который позволяет двусторонне взаимодействовать с SQL Server. Рассмотрим некоторые члены этого класса.

  1. При создании адаптера выполняется конструктор, параметрами которого будут строка, содержащая команду select, и объект типа SqlConnection.

  2. Fill — данный метод заполняет таблицу на основе заданной команды select. При этом в качестве параметра указывается объект типа DataSet и имя создаваемой на основе запроса select таблицы.

  3. Свойства InsertCommand, DeleteCommand, UpdateCommand содержат команды, для автоматического внесения изменений в таблицу на стороне сервера. можно использовать объект класса

System.Data.SqlClient.SqlCommandBuilder (конструктор SQL-команд)

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

  1. Метод Update вызывает соответствующую команду (или команды) для проведения изменений на стороне сервера.

Построим оконное приложение, содержащее в главном окне объект DataGridview и позволяющее переносить на SQL Server изменения, которые вы вносите в таблицу на форме.

Рассмотрим шаги, которые следует проделать, чтобы получить нужный результат.

  1. Создадим простейшее оконное приложение с главным окном Form1.

  1. Поместим на главное окно объекты DataGridView и Button. Обращаю ваше внимание, что мастер автоматически вносит изменения в модуль Forml.Designer.cs, где содержатся описания класса Form1. Особо обратите внимание на метод InitializeComponent, где содержатся команды инициализации компонентов формы. Данный метод вызывается из конструктора формы, который расположен в модуле Form1.cs.

  1. Чтобы использовать создаваемые нами объекты в любых событиях главной формы, надо добавить определение этих объектов в класс Form1, который содержится в модуле Form1.Designer.cs. Вот эти определения:

private System.Data.DataSet ds;

private System.Data.SqlClient.SqlDataAdapter da;

private System.Data.SqlClient.SqlConnection сn;

private System.Data.SqlClient.SqlCommandBuilder sb;

To есть мы определили: объект базы данных (DataSet), объект "адаптер" (SqlDataAdapter), объект "соединение" (SqlConnection) и объект "конструктор команд" (SqlCommandBuilder). Инициализацию же их мы поместим в метод InitializeComponent:

this.ds = new System.Data.DataSet();

this.ds.DataSetName = "NewDataSet";

this.cn = new System.Data.SqlClient.SqlConnection();

this.cn.ConnectionString = "Data Source=DOM;Initial Catalog=institute;" + "User Id=sal; Password=valsidalv";

  1. Теперь можно заполнять событие Load, в котором будет заполняться объект DataGridView.

private void Form1_Load(object sender, EventArgs e)

{

// определить адаптер

da = new System.Data.SqlClient.SqlDataAdapter

("select * from dbo.students", cn);

// автоматическая генерация команд для адаптера

sb = new System.Data.SqlClient.SqlCommandBuilder(da);

// заполняем DataSet

da.Fill(ds,"st");

// определяем источник для объекта DataGridview

this.dataGridView1.DataSource = ds.Tables["st"].DefaultView;

}

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

private void button1_Click(object sender, EventArgs e)

{

try

{

dataGridView1.Refresh();

da.Update(ds, "st");

}

// обработка исключений

catch (Exception ex)

{

System.Windows.Forms.MessageBox.Show(ex.Message);

}

}

В режиме конструктора приложение имеет окно, представленное на рис. 5.10. Мы можем вносить изменения в таблицу на форме, а когда нажмем кнопку Обновить, эти изменения будут осуществлены и на SQL Server.

Рис. 5.10