ADO.NET. Управление базами данных. Связь по схеме OLE DB провайдера. Коррекция стилей DataGridView, страница 23

Метод ExecuteNonQuery объекта DbCommand позволяет производить операции со строками таблиц: изменение данных таблиц, запрос деталей структуры БД, создание новых объектов базы. Последнее действие выполняется с помощью команды CREATE. Создать можно такие объекты: TABLE, INDEX, PROCEDURE, VIEW, USER, GROUP.

Метод применяется для выполнения тех команд, которые не возвращают Result Set (множество строк таблицы). Ими являются операторы DDL (Data Definition Language), например, CREATE TABLE, ALTER COLUMN, команды, изменяющие схему документа или команды запуска хранимых процедур.

Метод ExecuteNonQuery целесообразно использовать также для выполнения таких команд SQL, которые изменяют данные, но не возвращают строки таблицы, например: INSERT, DELETE и UPDATE. Суть операции, производимой методом ExecuteNonQuery, определяется текстом команды. Например:

  void TestExecuteNonQuery()

  {

   cn.Open();

   OleDbCommand cmd = new OleDbCommand(

    "CREATE TABLE Test (ID Number primary key, Name Text)", cn);

   int n = cmd.ExecuteNonQuery();

   Console.WriteLine("{0} lines affected", n);

   cmd.CommandText = "INSERT INTO Test VALUES (1, 'John')";

   n = cmd.ExecuteNonQuery();

   Console.WriteLine("{0} lines affected", n);

   cmd.CommandText = "INSERT INTO Test VALUES (2, 'James')";

   n = cmd.ExecuteNonQuery();

   Console.WriteLine("{0} lines affected", n);

   cmd.CommandText = "UPDATE Test SET Name='Alex' WHERE ID=1";

   cmd.ExecuteNonQuery();

   cmd.CommandText = "SELECT * FROM Test";

   IDataReader reader = cmd.ExecuteReader();

   Console.WriteLine("Table Test Content");

   for (n = 1; reader.Read(); n++)

   {

    Console.Write(n + ".   {");

    for (int i = 0; i < reader.FieldCount; i++)

      Console.Write(reader[i] + ",  ");

    Console.WriteLine("}");

   }

   reader.Close();

   cmd.CommandText = "DROP TABLE Test";

   cmd.ExecuteNonQuery();

   cn.Close();

  }

Вызовите и выполните этот метод в пошаговом режиме в рамках текущего проекта. Наблюдайте происходящее в окне Output. При создании объекта OleDbCommand текст его команды (CommandText) установлен так, чтобы добавить в базу новую таблицу по имени Test. Вызов ExecuteNonQuery для объекта OleDbCommand выполняет команду и возвращает целое число (количество измененных записей). Далее мы изменяем текст команды и вновь выполняем ее. Просмотр результатов серии команд удбно производить с помощью метода ExecuteReader. Последняя команда ExecuteNonQuery удаляет тестовую таблицу из базы данных.

Параметризованные запросы

Некоторым командам сопутствуют параметры, в том числе и возвращаемые. Для управления параметрами в ADO.NET имеется класс OleDbParameter, который работает с так называемым, позиционным параметром Access. Он обозначается знаком вопроса. Класс SqlParameter работает с именованным параметром и его имя начинается с символа @. Рассмотрим, как использовать параметры в следующем сценарии.

·  Создадим новый XML-файл с данными о нескольких студентах. Это упражнение полезно для практики работы с редактором XML.

·  В цикле поэтапного чтения этого файла будем вставлять в таблицу студентов новые записи, генерируемые на основе читаемых данных. Эту работу выполним с помощью объекта класса XmlTextReader.

Описанный сценарий, во-первых, позволяет продемонстрировать технику постепенного вычитывания отдельных компонентов XML-документа, которая может пригодиться вам при чтении разнообразных (в том числе и ненадежных) документов, во-вторых, — возможности команды ExecuteNonQuery.

·  В окне Solution Explorer поставьте фокус на узел дерева, соответствующий имени проекта и вызовите его контекстное меню.

·  В меню выберите команду Add®New Item и добавьте к проекту новый XML-файл. Назовите его Students.xml.

·  В окне редактора введите текст XML-документа и сохраните его, дав команду File®Save.

<?xml version="1.0" encoding="utf-8" ?>

<!-- Это тестовый документ XML -->