Высокоуровневые методы информатики и программирования

Содержание

Слайд 2

Технологии Microsoft для работы с БД ODBC – с использованием драйверов

Технологии Microsoft для работы с БД

ODBC – с использованием драйверов баз

данных (описание источников данных);
OLEDB – с использование COM компонент – провайдеров баз данных;
ADO - с использование COM компонент – провайдеров баз данных и DataSet класса (отличный от DataSet в ADO.Net);
ADO.Net – с использованием управляемых провайдеров БД.
Слайд 3

Технология ADO.NET ADO .NET это набор классов, интерфейсов, структур и перечислений

Технология ADO.NET

ADO .NET это набор классов, интерфейсов, структур и перечислений в

библиотеке .NET, которые дают возможность доступа к реляционным источникам данных
Все классы разделены по пространствам имен:
System.Data,
System.Data.Odbc
System.Data.OleDb,
System.Data.SqlClient, etc.
ADO .NET это дальнейшее развитие ADO.
Имеет другую объектную модель, но поддерживает те же подходы к выполнению работы!
Слайд 4

Пространства имен FCL (FCL Namespaces) System System.Data System.Xml System.Web Globalization Diagnostics

Пространства имен FCL (FCL Namespaces)

System

System.Data

System.Xml

System.Web

Globalization

Diagnostics

Configuration

Collections

Resources

Reflection

Net

IO

Threading

Text

ServiceProcess

Security

Design

ADO

SQLTypes

SQL

XPath

XSLT

Runtime

InteropServices

Remoting

Serialization

Serialization

Configuration

SessionState

Caching

Security

Services

Description

Discovery

Protocols

UI

HtmlControls

WebControls

System.Drawing

Imaging

Drawing2D

Text

Printing

System.Windows.Forms

Design

ComponentModel

Слайд 5

Провайдер данных Связь с базой данных создается и поддерживается при помощи

Провайдер данных

Связь с базой данных создается и поддерживается при помощи провайдеров

данных (Data Provider).
Провайдер это набор взаимосвязанных классов, обеспечивающих доступ к данным.
Любой провайдер состоит из следующего набора типов классов:
Connection – обеспечивает подключение к БД;
Command – для управления БД; позволяет выполнять команды SQL или хранимые процедуры;
DataReader – предоставляет доступный только для однонаправленного чтения набор записей, подключенный к БД;
DataAdapter – заполняет отсоединенный объект DataSet или DataTable и обновляет его содержимое.
Слайд 6

Провайдеры данных ADO.NET Названия классов провайдера включают префикс перед названием типа

Провайдеры данных ADO.NET

Названия классов провайдера включают префикс перед названием типа класса.
Например

:
OleDb<имяКласса> - для провайдера OleDb
Sql<имяКласса> - для провайдера SqlClient
SQL Server провайдер – специально для работы с сервером Microsoft SQL (пространство System.Data.SqlClient)
С Microsoft SQL Server можно работать и с помощью классов OLEDB, но менее эффективно
Слайд 7

Имеющиеся в .Net провайдеры баз данных Odbc Data Provider - провайдер

Имеющиеся в .Net провайдеры баз данных

Odbc Data Provider - провайдер для

работы с базами данных по технологии ODBC (System.Data.Odbc,префикс Odbc)
OleDb Data Provider - провайдер для работы с базами данных по технологии OleDb (System.Data.OleDb префикс OleDb)
SQL Server Data Provider – провайдер для работы с базами данных SQL Server (System.Data.SQLClient, префикс Sql)
Oracle Data Provider – провайдер для работы с базами данных Oracle (System.Data.OracleClient, префикс Oracle).
Odbc, OleDb, SQL Server провайдеры содержатся в компоненте System.Data.
SQL Server провайдер также содержится и в отдельном компоненте System.Data.SqlClient.
Oracle провайдер содержится в компоненте System.Data.OracleClient.
Слайд 8

Microsoft ADO.NET Data Providers В пространстве имен System.Data описаны общие классы

Microsoft ADO.NET Data Providers

В пространстве имен System.Data описаны общие классы

ADO.Net.
Например:
DataSet
DataTable
DataRaw
DataRelation и т.д.
Слайд 9

Задание оператора using для работы с базой данных Оператор using должен

Задание оператора using для работы с базой данных

Оператор using должен быть

записан до всех других объявлений в файле и не может появиться внутри класса или объявлений модуля
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Data.Odbc;
public class Form1
{
. . .
}
Слайд 10

Провайдеры SQL Server и Oracle работают с базой данных самостоятельно. Провайдеры

Провайдеры SQL Server и Oracle работают с базой данных самостоятельно.

Провайдеры ODBC и OleDB работают через старые технологии (или драйверы БД или COM компоненты провайдеры БД).
Слайд 11

Использование провайдеров данных для работы с БД SQL-данные MS SQL Server,

Использование провайдеров данных для работы с БД

SQL-данные

MS SQL Server, Oracle,
MsAccess,

Foxpro, ...

SQL Server
Oracle
MySQL

ODBC

Не-SQL-данные

Directory Services, Mail,
Text, Video, ...

OLEDB

Слайд 12

Шаблон работы в соединенном режиме с БД 1.) Объявление соединения (connection)

Шаблон работы в соединенном режиме с БД

1.) Объявление соединения (connection)
try {


1.) Открытые соединения с БД

3.) Обработка результатов

2.) Создание и выполнение команды

4.) Освобождение ресурсов
} catch ( Exception ) {
Handle exception
} finally {
try {
4.) Закрытие соединения
} catch (Exception)
{ Handle exception }
}

Слайд 13

Способы работы с базами данными С поддержкой соединения (Connected): Forward-only, read-only

Способы работы с базами данными

С поддержкой соединения (Connected): Forward-only, read-only
Программа делает

запрос, затем читает результаты и обрабатывает их
Используется курсор “Firehose” (брандспойт)
Используется объект DataReader
С разрывом соединения (Disconnected, отсоединенный режим)
Программа делает запрос затем читает и сохраняет результаты для обработки, отсоединяется от БД
Выполняется работа с данными (добавление, изменение, удаление)
Минимизируется время соединения с базой данных
Используется объект DataSet
С использованием технологии LINQ
LINQ to DataSet
LINQ to SQL
Слайд 14

ExecuteXxxx Использование классов ADO.NET Data Base SQL Server организации Connection DataReader

ExecuteXxxx

Использование классов ADO.NET

Data
Base

SQL Server организации

Connection

DataReader

DataAdapter

DataSet

Command

Fill

Update

Update, Insert, Delete

Client
Program

Компьютер пользователя

ExecuteReader

Read

Select

Провайдер

Слайд 15

Назначение типов классов ADO.Net Connection – выполняет соединение с БД Command

Назначение типов классов ADO.Net

Connection – выполняет соединение с БД
Command – подготовка

и выполнение SQL команд
Parameter - для модификации объекта Command
DataReader – для быстрого считывания данных из БД
DataAdapter – содержит набор SQL команд (Select, Insert, Update, Delete) для работы с данными в оперативной памяти и выполняет работу по связи класса Dataset с базой данных
CommandBuilder
Слайд 16

Объекты ADO.NET Data Set .NET Applications Data Reader Command Object Connection

Объекты ADO.NET

Data Set

.NET Applications

Data Reader

Command Object

Connection Object

Managed Data Provider
(OLEDB)

База
данных

Провайдер базы

данных

ExecuteNonQuery
ExecuteScalar

DataAdapter

Слайд 17

Отсоединенный режим работы с БД

Отсоединенный режим работы с БД

Слайд 18

Последовательность работы с данными с поддержкой соединения Установить связь с базой

Последовательность работы с данными с поддержкой соединения

Установить связь с базой

данных.
Выполнить запрос к базе данных.
Создать и выполнить команды
Получить результаты команды.
Закрыть связь с базой данных
Слайд 19

ExecuteXxx Использование классов ADO.NET Data Base SQL Server организации Connection DataReader

ExecuteXxx

Использование классов ADO.NET

Data
Base

SQL Server организации

Connection

DataReader

DataAdapter

DataSet

Command

Fill

Update

Update, Insert, Delete

Client
Program

Компьютер пользователя

ExecuteReader

Read

Provider

Select

Слайд 20

Класс Connection выполняет реальный обмен данными между базой данных и приложением

Класс Connection

выполняет реальный обмен данными между базой данных и приложением
является часть

Data Provider
свойства
ConnectionString
ConnectionTimeout
Data Base
методы
Open() – открытие соединения
Close() – закрытие соединения
Слайд 21

Строка соединения Объект SqlConnection Server Database (Initial Catalog) uid (User ID)

Строка соединения

Объект SqlConnection
Server
Database (Initial Catalog)
uid (User ID)
pwd (Password)
Объект OleDbConnection
Provider
Data Source

(Server)
uid (User ID)
pwd (Password)
Слайд 22

Формат строки соединения “param1 = val1; param2 = val2; … paramN

Формат строки соединения
“param1 = val1; param2 = val2; … paramN =

valN”
param – имя параметра строки соединения
val – значение параметра
Слайд 23

Основные параметры строки соединения Data Source=(local)\SQLEXPRESS; (local) localhost . (просто точка)

Основные параметры строки соединения

Data Source=(local)\SQLEXPRESS;
(local)
localhost
. (просто точка)
Initial Catalog = <имя БД>;
uid=<идентификатор>;
рwd=<пароль>;
IntegratedSecurity

=True;
True
ISSP
yes
Provider= … (для ODBC и OLEDB)
….
Слайд 24

Пример строки соединения Для Access Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fld

Пример строки соединения

Для Access
Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fld + "\\VbDB.mdb";
Для

SQL Server
con.ConnectionString = @"Data Source=localhost\sqlexpress;Initial Catalog=Northwind;Integrated Security=True";
Слайд 25

Пример использования объекта Connection string strConn; strConn = "Provider=Microsoft.Jet.OLEDB.4.0;” + “Data

Пример использования объекта Connection

string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;” +
“Data Source =

c:\school.mdb“;
OleDbConnection conn;
conn = new OleDbConnection(strConn);
conn.Open();
. . .
conn.Close();
Слайд 26

ExecuteXxx Использование классов ADO.NET Data Base SQL Server организации Connection DataReader

ExecuteXxx

Использование классов ADO.NET

Data
Base

SQL Server организации

Connection

DataReader

DataAdapter

DataSet

Command

Fill

Update

Update, Insert, Delete

Client
Program

Компьютер пользователя

ExecuteReader

Read

Provider

Select

Слайд 27

Класс Command Класс команд, позволяет выполнить действия с базой данных (выборку,

Класс Command

Класс команд, позволяет выполнить действия с базой данных (выборку, обновление,

дополнение, удаление и т.п.).
Свойства:
CommandType:
CommandType.Text - операторы SQL;
CommandType.TableDirect – работа с конкретной таблицей;
CommandType.StoredProcedure – вызов хранимой в БД; процедуры.
CommandText содержит:
текст оператора SQL (для типа CommandType.Text);
имя таблицы (для CommandType.TableDirect);
имя хранимой процедуры с параметрами (для CommandType.StoredProcedure);
Connection – ссылка на открытое соединение (объект Connection);
Parameters – коллекция параметров запроса.
Слайд 28

Основные методы выполнения Command ExecuteReader() - выполняет оператор SELECT, создает и

Основные методы выполнения Command

ExecuteReader() - выполняет оператор SELECT, создает и возвращает

ссылку на объект DataReader который содержит результат выполнения запроса.
ExecuteNonQuery() - выполняет операторы INSERT, DELETE, UPDATE на языке SQL (возвращает количество обработанных записей)
ExecuteScalar() – возвращает первую строку первого столбца в результирующем наборе (используя функции COUNT, AVG, MIN, MAX, SUM);
Слайд 29

ExecuteXxx Использование классов ADO.NET Data Base SQL Server организации Connection DataReader

ExecuteXxx

Использование классов ADO.NET

Data
Base

SQL Server организации

Connection

DataReader

DataAdapter

DataSet

Command

Fill

Update

Update, Insert, Delete

Client
Program

Компьютер пользователя

ExecuteReader

Read

Provider

Select

Слайд 30

Метод ExecuteReader() Создает объект DataReader и возвращает ссылку на него. Текст

Метод ExecuteReader()

Создает объект DataReader и возвращает ссылку на него.
Текст команды должен

содержать оператор Select или вызов хранимой процедуры.
Слайд 31

Пример вызова метода ExecuteReader() // формируем строку подключения к БД string

Пример вызова метода ExecuteReader()

// формируем строку подключения к БД
string strConn ="Provider=Microsoft.Jet.OLEDB.4.0;

Data Source = c:\school.mdb“;
OleDbConnection conn = new (strConn);
string strSQL = "select * from books”; //SQL команда
objConn.Open(); // выполняем соединение с БД
// создаем объект класса Command
OleDbCommand cmnd as new OleDbCommand(strSQL,conn);
OleDbDataReader dtReader;
// создаем объект для чтения
dtReader=objComm.ExecuteReader();
Слайд 32

Класс DataReader Объекты данного класса позволяют выполнять только чтение данных из

Класс DataReader

Объекты данного класса позволяют выполнять только чтение данных из БД,

полученных с помощью объекта Command, только в одном направлении (от начала к концу).
Одновременно объект RataReader дает доступ только к одной записи выборки.
Можно определить значение поля в записи, используя индексатор
dr[n] или dr[“имя поля”]
Слайд 33

Объект DataReader Для перехода к следующей записи выборки используется метод bool

Объект DataReader

Для перехода к следующей записи выборки используется метод
bool Read() :

читает текущую запись и перемещает указатель на следующую запись.
Если метод Read возвращает true, то следующая запись прочитана, если записи нет, то возвращается false.
Для окончания работы с объектом должен быть выполнен вызов метода:
Close: Окончание работы с данными в DataReader.
Слайд 34

Объект DataReader Метод ExecuteReader() возвращает ссылку на объект DataReader Объект DataReader

Объект DataReader

Метод ExecuteReader() возвращает ссылку на объект DataReader
Объект DataReader позволяет последовательно

читать записи из полученной выборки (запись за записью)

DataReader ExecuteReader()

Слайд 35

Получение данных выборки dr[i] или dr[“имя”] DataReader Read() Выборка данных Одновременно

Получение данных выборки

dr[i] или dr[“имя”]

DataReader

Read()

Выборка данных

Одновременно в DataRead хранится одна запись

выборки.
При вызове метода Read() считывается следующая запись.
Слайд 36

Чтение записей с помощью DataReader Поля (столбцы) текущей записи можно прочитать

Чтение записей с помощью DataReader

Поля (столбцы) текущей записи можно прочитать двумя

способами
dtReader[0]
dtReader[“ChildId”] // ChildId – имя поля записи
Пример:
string Results;
while (dtReader.Read() == true)
{
Console.WriteLine(dtReader[“ChildId”] + “ “ + tReader[“name”];
}
Textbox1.text=Results;
Слайд 37

Класс DataTableReader DataTableReader dtr = tbl.CreateDataReader(); while(dtr.Read()) { for(int i=0; I

Класс DataTableReader

DataTableReader dtr = tbl.CreateDataReader();
while(dtr.Read())
{
for(int i=0; I < dtr.FieldCount;

i++)
{
Console.Write(“{0} = {1}”,
dtr.GetName(i),
dtr.GetValue(i).ToString().Trim());
}
Console.WriteLine();
dtr.Close();
}
Слайд 38

Метод ExecuteNonQuery() Позволяет выполнить такие команды, команды корректировки (возвращает количество измененных

Метод ExecuteNonQuery()

Позволяет выполнить такие команды,
команды корректировки (возвращает количество измененных записей)
INSERT


(INSERT INTO tbl (f1, f2, f3) VALUES (‘xxx’, 1986, ‘yyy’))
UPDATE
(UPDATE childs SET id = 27 WHERE year = 1997)
DELETE
(DELETE FROM childs WHERE ID = 5)
другие команды, которые не возвращают значений (результат -1)
CREATE DATABASE
CREATE TABLE
Слайд 39

Пример вызова метода ExecuteNonQuery() OleDbCommand Comm = new OleDbCommand(); Comm.Connection =

Пример вызова метода ExecuteNonQuery()

OleDbCommand Comm = new OleDbCommand();
Comm.Connection = Conn;
Comm.CommandType =

CommandType.Text;
Comm.CommandText = "INSERT into Books(id, [year], author, name) " + "VALUES (33, 2006, ‘John’, ‘Programming’)";
try
{
int rc = (int)Comm.ExecuteNonQuery();
}
catch (OleDbException ex)
{
System.Console.WriteLine(ex.Message);
}
Слайд 40

Параметры запроса В SQL запросе в Command.Text можно задавать переменные –

Параметры запроса

В SQL запросе в Command.Text можно задавать переменные – параметры.
Параметры

позволяют менять SQL запрос без переписывания его текста.
Параметры используются при вызове хранимой процедуры для передачи входных данных и получения результатов.
Для Odbc поля параметра задаются символами «?»
select EmpId, Title, FirstName, LastName
from Employees where (FirstName = ?, LastName = ? )
Для OleDbCommand и SqlCommand используется именованные поля параметров - @Xxxxx
select EmpId, Title, FirstName, LastName
from Employees
where (FirstName = @First, LastName = @Last )
Слайд 41

Добавление параметров Класс xxxParameter для описания параметров запроса. свойство ParameterName; cвойство

Добавление параметров

Класс xxxParameter для описания параметров запроса.
свойство ParameterName;
cвойство xxxType (например, SqlDbType);
свойство

Direction (ParameterDirection.Input; ParameterDirection.Output);
свойство Value.
В объекте Command имеется коллекция параметров (объектов Parameter) Parameters.
Для использования параметра нужно создать объект Parameter и сохранить его в коллекции Parameters.
Методы добавления
Add(parameter);
AddWithValue(name, value);
Слайд 42

Пример описания параметра SqlParameter parameter = new SqlParameter(); parameter.ParameterName = "@CategoryName";

Пример описания параметра

SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@CategoryName";
parameter.SqlDbType

= SqlDbType.NVarChar;
parameter.Direction = ParameterDirection.Input;
Слайд 43

Метод AddWithValue() Коллекции Parameters имеет метод AddWithValue() с двумя входными параметрами:

Метод AddWithValue()

Коллекции Parameters имеет метод AddWithValue() с двумя входными параметрами:
name –

название параметра;
value – значение параметра.
Тип параметра не задается, а выводится из типа данных.
cmd.Parameters.AddWithValue("@LastName", lastName);
Этот метод нельзя использовать для выходных параметров хранимой процедуры.
Слайд 44

Передача параметров в хранимую процедуру // Create the command and set

Передача параметров в хранимую процедуру

// Create the command and set its

properties.
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandText = "SalesByCategory";
command.CommandType = CommandType.StoredProcedure;
// Add the input parameter and set its properties.
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@CategoryName";
parameter.SqlDbType = SqlDbType.NVarChar;
parameter.Direction = ParameterDirection.Input;
// Add the parameter to the Parameters collection.
command.Parameters.Add(parameter);
// задаем значение параметра
command.Parameters[“@CategoryName”.Value = categoryName;
// Открывем соединение и выполняем работу с объектом DataReader
connection.Open();
SqlDataReader reader = command.ExecuteReader();
Слайд 45

Пример вызова хранимой процедуры В БД есть хранимая процедура CREATE PROCEDURE

Пример вызова хранимой процедуры

В БД есть хранимая процедура
CREATE PROCEDURE GetPetName
@carID int,

@petName char(10) output AS
SELECT @petName = PetName from Inventory where CarID = @carID
Вызов процедуры
SqlCommand cmd = new SqlCommand("GetPetName", this.sqlCn);
cmd.CommandType = CommandType.StoredProcedure;
// Input param.
SqlParameter param = new SqlParameter(); param.ParameterName = "@carID";
param.SqlDbType = SqlDbType.Int; param.Value = carID; param.Direction = ParameterDirection.Input;
cmd.Parameters.Add(param);
// Output param.
param = new SqlParameter(); param.ParameterName = "@petName";
param.SqlDbType = SqlDbType.Char; param.Size = 10; param.Direction = ParameterDirection.Output;
cmd.Parameters.Add(param);
// Execute the stored proc.
cmd.ExecuteNonQuery();
// Return output param.
carPetName = ((string) cmd.Parameters["@petName"].Value).Trim();
Слайд 46

Пример использования метода AddWithValue Comm.CommandText = "INSERT into “ + "

Пример использования метода AddWithValue

Comm.CommandText = "INSERT into “ + "
"Books(id,[year],author,name)

" +
"VALUES (@id,@year,@au,@nm)";
//
Comm.Parameters.AddWithValue(“@id”, 112);
Comm.Parameters.AddWithValue (“@year”, 200);
Comm.Parameters.AddWithValue (“@au”, “Иванов С.П.”);
Comm.Parameters.AddWithValue (“@nm”, “История России”);
Comm.ExecuteNonQuery();