Тема 22. Работа с Базами Данных с помощью ADO
Что такое ADO ?
ADO - ActiveX Database Objects ADO .NET - технология ADO для .NET Framework
ActiveX - COM компоненты, реализующие стандартные интерфейсы подключения к контейнерам-клиентам.
Поставщики данных .NET Framework (ADO.NET)
Поставщик данных .NET Framework используется для установления соединения с базой данных, выполнения команд и получения результатов.Эти результаты обрабатываются непосредственно, помещаются в DataSet, чтобы по мере необходимости они были доступны для пользователей вместе с данными из нескольких источников, либо распределяются между уровнями. Источники данных .NET Framework являются упрощенными и создают минимальный уровень между источником данных и кодом, увеличивая тем самым производительность без ущерба для функциональных возможностей.
• .NET Framework Поставщик данных для SQL Server Предоставляет доступ к данным для Microsoft SQL Server 7.0 или более поздних версий.Использует пространство имен System.Data.SqlClient.
• .NET Framework Поставщик данных для OLE DB Для источников данных OLE DB.Использует пространство имен System.Data.OleDb.
• .NET Framework Поставщик данных для ODBC Для источников данных ODBC.Использует пространство имен System.Data.Odbc.
• .NET Framework Поставщик данных для Oracle Для источников данных Oracle.Источник данных .NET Framework для Oracle поддерживает клиентское программное обеспечение версии 8.1.7 и старше и использует пространство имен System.Data.OracleClient.
• Поставщик EntityClient Предоставляет доступ к данным для приложений модели EDM (Entity Data Model).Использует пространство имен System.Data.EntityClient.
Основные объекты поставщиков данных .NET Framework:
• Connection - Устанавливает соединение с конкретным источником данных.Базовым классом для всех объектов Connection является DbConnection.
• Command - Выполняет команду в источнике данных.Обеспечивает доступность Parameters и может выполнять команды в области Transaction из Connection.Базовым классом для всех объектов Command является DbCommand.
• DataReader - Считывает из источника данных однопроходный поток данных только для чтения.Базовым классом для всех объектов DataReader является DbDataReader.
• DataAdapter - Заполняет DataSet и выполняет обновления в источнике данных.Базовым классом для всех объектов DataAdapter является DbDataAdapter.
Пример
using System;
using System.Data.SqlClient;
using System.Data;
using System.Threading;
namespace Students
{
class Program
{
static void Main(string[] args)
{
/*Объявляем строковую переменную и записываем в нее
строку подключения
Data Source - имя сервера, по стандарту (local)\SQLEXPRESS
Initial Catalog - имя БД
Integrated Security=-параметры безопасности
Мое подключение имеет вид
*/
string connStr = @"Data Source=(local)\SQLEXPRESS;
Initial Catalog=Test;
Integrated Security=True";
/*Здесь указал имя БД(хотя для создания БД его указывать не нужно)
для того, чтобы проверить, может данная БД уже создана
Создаем экземпляр класса SqlConnection по имени conn
и передаем конструктору этого класса, строку подключения
*/
SqlConnection conn = new SqlConnection(connStr);
try
{
//пробуем подключится
conn.Open();
}
catch (SqlException se)
{
// Если база не обнаружена, то создаем новую
if (se.Number == 4060)
{
Console.WriteLine("Подождите, идет создание БД");
//закрываем соединение
conn.Close();
//переопределяем обьект conn, и передаем новую строку подключения
conn = new SqlConnection(@"Data Source=(local)\SQLEXPRESS;Integrated Security=True");
/*Создаем экземпляр класса SqlCommand по имени cmdCreateDataBase
и передаем конструктору этого класса, запрос на создание БД
и объект типа SqlConnection
*/
SqlCommand cmdCreateDataBase = new SqlCommand(string.Format("CREATE DATABASE [{0}]", "Test"), conn);
//открываем подключение
conn.Open();
/*Посылаем запрос к СУБД
В данном случае, в результате запроса ничего не возврашается
ExecuteNonQuery, в последующих примерах мы будем использовать
и другие методы
*/
Console.WriteLine("Посылаем запрос");
cmdCreateDataBase.ExecuteNonQuery();
//закрываем подключение
conn.Close();
//задержка, нужна для того, чтоб БД успела создаться
Thread.Sleep(5000);
//переопределяем обьект conn, и передаем новую строку подключения
conn = new SqlConnection(connStr);
//открываем подключение
conn.Open();
}
}
finally
{
Console.WriteLine("Соедение успешно произведено");
conn.Close();
conn.Dispose();
}
}
}
}
LINQ
Запрос представляет собой выражение, извлекающее данные из источника данных.Запросы обычно выражаются на специальном языке запросов.Со временем были разработаны различные языки для различных типов источников данных, например SQL для реляционных баз данных и XQuery для XML.Таким образом, разработчики вынуждены изучать новый язык запросов для каждого типа источника данных или формата данных, который они должны поддерживать.LINQ упрощает ситуацию, предлагая единообразную модель для работы с данными в различных видах источников и форматов данных.В запросе LINQ работа всегда осуществляется с объектами.Для запросов и преобразований данных в XML-документах, базах данных SQL, наборах данных ADO.NET, коллекциях .NET и любых других форматах, для которых доступен поставщик LINQ, используются одинаковые базовые шаблоны кодирования.
Дополнительная литература
Работа с подключенным уровнем ADO .NET в C# http://www.cyberforum.ru/ado-net/thread182279.html
Создание базы данных http://professorweb.ru/my/ADO_NET/base/level1/1_3.php
Транзакции баз данных http://professorweb.ru/my/ADO_NET/base/level1/1_9.php
Introduction to LINQ Queries (C#) https://msdn.microsoft.com/ru-ru/library/bb397906.aspx