Российский Государственный Технологический Университет им. К.Э. Циолковского
Опубликован: 02.03.2007 | Доступ: свободный | Студентов: 5636 / 790 | Оценка: 3.96 / 3.45 | Длительность: 27:04:00
ISBN: 978-5-9556-0086-4
Лекция 18:

Основы ADO .NET

< Лекция 17 || Лекция 18: 123456789101112

Отступление о запросах

  1. Запросы, которые не возвращают записей (action query или КОМАНДНЫЕ ЗАПРОСЫ). Различаются:
    • запросы обновления или Data Manupulation Language queries. Предназначаются для изменения содержимого базы данных
      UPDATE Customers
       Set    CompanyName = 'NewHappyName'
       WHERE  CustomerID = '007'
      
       INSERT INTO Customers (CustomerID, CompanyName)
       VALUES                ('007', 'NewHappyCustomer') 
      
       DELETE FROM Customers
       WHERE  CustomerID = '007'
    • запросы изменения или Data Definition Language queries. Предназначены для изменения структуры базы данных
      CREATE TABLE myTable
                           	(
                           	Field1 int NOT NULL
                           	Field2 varchar()
                           	)
  2. Запросы, возвращающие значения из базы данных. Ниже представлены три примера запросов.

    Возвращает значения полей для всех записей, представленных в таблице Customers.

    SELECT 
            CustomerID,
            CompanyName,
            ContactName,
            Phone
     FROM
            Customers

    Возвращает значения полей для записей, представленных в таблице Customers, у которых значение поля Phone равно строке ' 333–2233 '.

    SELECT 
            CustomerID,
            CompanyName,
            ContactName
     FROM
            Customers
     WHERE
            Phone = '222–3322'

    Параметризованный запрос. Множество возвращаемых значений зависит от значения параметра, стандартно обозначаемого маркером ' ?' и замещаемого непосредственно при выполнении запроса:

    SELECT 
            CompanyName,
            ContactName,
            Phone
     FROM
            Customers
     WHERE
           CustomerID = ?

Command

Командаобъект, представляющий один из двух классов: либо класс OleDbCommand, либо класс SqlCommand. Основное назначение объекта "Команда" – выполнение различных действий над Базой Данных (ИСТОЧНИКЕ ДАННЫХ) при использовании ОТКРЫТОГО СОЕДИНЕНИЯ. Сами же действия обычно кодируются оператором SQL или хранимой процедурой. Закодированная информация фиксируется с использованием объектов – представителей класса Parameter, специально разработанных для "записи" кодируемой в команде информации.

То есть после установления соединения с БД для изменения состояния этой базы может быть создан, соответствующим образом настроен и применен объект – представитель класса Command.

Объект "Команда" – стартовый стол для запуска непосредственно из приложения команд управления БД, которыми и осуществляется непосредственное управление БД. Команда в приложении обеспечивает взаимодействие приложения с базой данных, позволяя при этом:

  • сохранять параметры команд, которые используются для управления БД;
  • выполнять специфические команды БД INSERT, UPDATE, DELETE, которые не возвращают значений;
  • выполнять команды, возвращающие единственное значение;
  • выполнять команды специального языка определения баз данных DataBase Definition Language (DDL), например CREATE TABLE ;
  • работать с объектом DataAdapter, возвращающим объект DataSet ;
  • работать с объектом DataReader ;
  • для класса SqlCommand – работать с потоком XML;
  • создавать результирующие наборы, построенные на основе нескольких таблиц или в результате исполнения нескольких операторов.

Объект Command обеспечивает управление источником данных, которое заключается:

  • в выполнении DML (Data Manipulation Language) запросов – запросов, не возвращающих данные ( INSERT, UPDATE, DELETE );
  • в выполнении DDL (Data Definition Language) запросов – запросов, которые изменяют структуру Базы Данных ( CREATE );
  • в выполнении запросов, возвращающих данные через объект DataReader (SELECT).

Объект представлен двумя классами – SqlCommand и OleDb Command. Позволяет исполнять команды на БД и при этом использует установленное соединение. Исполняемые команды могут быть представлены:

  • хранимыми процедурами;
  • командами SQL;
  • операторами, возвращающими целые таблицы.

Объект – представитель класса Command поддерживает два варианта (варианты методов определяются базовым классом) методов:

  • ExecuteNonQuery – обеспечивает выполнение команд, не возвращающих данные, например INSERT, UPDATE, DELETE ;
  • ExecuteScalar – исполняет запросы к БД, возвращающие единственное значение;
  • ExecuteReader – возвращает результирующий набор через объект DataReader.

Доступ к данным в ADO .NET с помощью Data Provider 'а осуществляется следующим образом:

  • Объект – представитель класса Connection устанавливает соединение между БД и приложением.
  • Это соединение становится доступным объектам Command и DataAdapter.
  • При этом объект Command позволяет исполнять команды непосредственно над БД.
  • Если исполняемая команда возвращает несколько значений, Command открывает доступ к ним через объект DataReader.
  • Результаты выполнения команды обрабатываются либо напрямую, с использованием кода приложения, либо через объект DataSet, который заполняется при помощи объекта DataAdapter.
  • Для обновления БД применяют также объекты Command и DataAdapter.

Итак, в любом случае, независимо от выбранного поставщика данных, при работе с данными в ADO .NET используем:

  • Connection Object – для установки соединения с базой данных;
  • Dataset Object – для представления данных на стороне приложения;
  • Command Object – для изменения состояния базы.

Способы создания объекта Command:

  • с использованием конструкторов и с последующей настройкой объекта (указание строки запроса и объекта Connection );
  • вызов метода CreateCommand объекта Connection.
private void readButton_Click(object sender, System.EventArgs e)
 { 
 int i = 0;
 this.timer.Stop();
 rd.rolls.Clear();
 nPoints = 0;
 string strSQL =
 "SELECT nRolls,Victim,X,Y,oldX,OldY,Alpha,Red,Green,Blue From RollsTable";
 oleDbConnection.Open();
 OleDbCommand cmd = new OleDbCommand(strSQL,oleDbConnection);
 OleDbDataReader rdr = cmd.ExecuteReader();
 while (rdr.Read())
 {
 rd.AddRow(
 int.Parse((rdr["nRolls"]).ToString()),
 int.Parse((rdr["Victim"]).ToString()),
 float.Parse((rdr["X"]).ToString()),
 float.Parse((rdr["Y"]).ToString()),
 float.Parse((rdr["oldX"]).ToString()),
 float.Parse((rdr["oldY"]).ToString()),
 int.Parse((rdr["Alpha"]).ToString()),
 int.Parse((rdr["Red"]).ToString()),
 int.Parse((rdr["Green"]).ToString()),
 int.Parse((rdr["Blue"]).ToString())
 );
 i++;
 }
 rdr.Close();
 oleDbConnection.Close();
 rpDataGrid.DataSource = rd.rolls;
 nPoints = i;
 this.timer.Start();
 }
Листинг 18.10.
< Лекция 17 || Лекция 18: 123456789101112
kewezok kewezok
kewezok kewezok
Елена Шляхт
Елена Шляхт
Объясните плиз в чем отличие а++ от ++а
Почему результат разный?
int a=0, b=0;
Console.WriteLine(a++); //0
Console.WriteLine(++b); //1
a++;
++b;
Console.WriteLine(a); //2
Console.WriteLine(b); //2