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

Когда архитекторы n-уровневой архитектуры оценивают какую-либо новую технологию, шаблон или стратегию, они решают, как эта новая часть головоломки будет сочетаться с архитектурой. Если есть платформа Entity Framework, интеграция не вызывает каких-либо сложностей. Она может быть интегрирована в n-уровневую архитектуру, а также в одноуровневую архитектуру.

19.03.2009 15:32

Entity Framework FAQ

Понимание моделирования сущностей, отображение таких моделей на реляционные базы данных, а также проектирование сущностных моделей данных (Entity Data Model, EDM) являются первыми шагами к пониманию Entity Framework. Я начну свою статью с ответов на вопросы об основах Entity Framework, в том числе о классе ObjectContext, а затем отвечу на вопросы о том, когда и где стоит использовать Entity Client с Entity SQL. Кроме того, я планирую объяснить разницу между EntityClient и службами Object Services, а также последствия использования запросов LINQ и Entity SQL вместе с этими службами.

16.02.2009 15:15

Обзор ADO.NET Entity Framework

В выпуске Visual Studio 2008 в ADO.NET представлена новая архитектура Entity Framework. Она позволяет разработчикам обращаться к данным, используя объектную модель вместо логической или реляционной модели данных. Entity Framework помогает абстрагировать логическую схему данных в концептуальную модель и обеспечивает несколько способов взаимодействия с концептуальной моделью через службы Object Services и нового поставщика данных, называющегося EntityClient. В статье этого месяца обсуждается, что такое архитектура Entity Framework, как она применяется в приложении и как с ее учетом разрабатывать и программировать.

13.02.2009 18:44

Разработка сущностной модели данных с помощью Entity Framework

Entity Framework — это новая технология, разработанная для ADO.NET. Она позволяет разработчикам визуализировать данные, используя логическую, а не физическую модель, благодаря чему обеспечивается определенная гибкость разработки. В июльском номере журнала за 2007 год в рубрике «Точки данных» мы давали подробный обзор технологии Entity Framework (она должна быть официально выпущена в первой половине 2008 года).

13.02.2009 18:33

Использование атрибутов для нормализации и валидации бизнес-сущностей

В корпоративном программировании при проектировании уровня доступа к данным часто встает вопрос работы с бизнес-объектами(бизнес-сущностями): это загрузки/изменения/сохранения и перемещения между уровнями. Существует два основных подхода для этого - использование собственных бизнес-сущностей или стандартных средств (ADO.NET предоставляет достаточно удобные способы для этого) - использование DataSet.

20.01.2007 03:54

ADO.NET: Обзор технологии

Многие программисты, работающие с базами данных на платформах Microsoft, могли оценить простоту и удобство технологии ADO - ActiveX Data Objects. Интутитивно-понятный интерфейс и логичный набор объектов вместе с простотой программирования заслуженно получили признание программистов. Несмотря на это, вместе с новой платформой.NET Microsoft представляет и новое поколение средств доступа к базам данных - ADO.NET.

27.12.2006 01:32

Операции над данными с иерархической структурой. Разработка распределенных приложений в.NET

Эта статья демонстрирует методику чтения и записи иерархических наборов строк в источнике данных. В примерах кода, приведенных в этой статье, для соединения с базой данных Microsoft SQL Server или Microsoft Desktop Engine (MSDE) используется управляемый провайдер SQL (SQL managed provider). Для соединения с другими OLEDB-совместимыми источниками данных следует применять управляемый провайдер ADO (ADO managed provider).

27.12.2006 01:26

Работа с автономными данными в ADO.NET

Технология ADO.NET, в отличие от своих предшественников ADO и OLE DB, была разработана специально для использования в web приложениях, где не бывает постоянных соединений с БД. Традиционная работа с данными в ADO.NET строится по такой схеме: создается соединение Connection, затем оно открывается методом Open, создается объект команда Command, инкапсулирующая SQL команду, она исполняется, а соединение затем закрывается. Такой подход обеспечивает поточный доступ к результатам запросов. Т.е. читая данные с помощью DataReader, вы не можете перепрыгнуть через несколько записей или вернуться к предыдущей. Поточный доступ имеет максимальную производительность.

Последнее обновление: 31.10.2015

Сегодня большое значение имеет работа с данными. Для хранения данных используются различные системы управления базами данных: MS SQL Server, Oracle, MySQL и так далее. И большинство крупных приложений так или иначе используют для хранения данных эти системы управления базами данных. Однако чтобы осуществлять связь между базой данных и приложением на C# необходим посредник. И именно таким посредником является технология ADO.NET.

ADO.NET предоставляет собой технологию работы с данными, которая основана на платформе.NET Framework. Эта технология представляет нам набор классов, через которые мы можем отправлять запросы к базам данных, устанавливать подключения, получать ответ от базы данных и производить ряд других операций.

Причем важно отметить, что систем управления баз данных может быть множество. В своей сущности они могут различаться. MS SQL Server, например, для создания запросов использует язык T-SQL, а MySQL и Oracle применяют язык PL-SQL. Разные системы баз данных могут иметь разные типы данных. Также могут различаться какие-то другие моменты. Однако функционал ADO.NET построен таким образом, чтобы предоставить разработчикам унифицированный интерфейс для работы с самыми различными СУБД.

Основу интерфейса взаимодействия с базами данных в ADO.NET представляет ограниченный круг объектов: Connection, Command, DataReader, DataSet и DataAdapter. С помощью объекта Connection происходит установка подключения к источнику данных. Объект Command позволяет выполнять операции с данными из БД. Объект DataReader считывает полученные в результате запроса данные. Объект DataSet предназначен для хранения данных из БД и позволяет работать с ними независимо от БД. И объект DataAdapter является посредником между DataSet и источником данных. Главным образом, через эти объекты и будет идти работа с базой данных.

Однако чтобы использовать один и тот же набор объектов для разных источников данных, необходим соответствующий провайдер данных . Собственно через провайдер данных в ADO.NET и осуществляется взаимодействие с базой данных. Причем для каждого источника данных в ADO.NET может быть свой провайдер, который собственно и определяет конкретную реализацию вышеуказанных классов.

По умолчанию в ADO.NET имеются следующие встроенные провайдеры:

    Провайдер для MS SQL Server

    Провайдер для OLE DB (Предоставляет доступ к некоторым старым версиям MS SQL Server, а также к БД Access, DB2, MySQL и Oracle)

    Провайдер для ODBC (Провайдер для тех источников данных, для которых нет своих провайдеров)

    Провайдер для Oracle

    Провайдер EntityClient. Провайдер данных для технологии ORM Entity Framework

    Провайдер для сервера SQL Server Compact 4.0

Кроме этих провайдеров, которые являются встроенными, существует также множество других, предназначенных для различных баз данных, например, для MySQL.

Основные пространства имен, которые используются в ADO.NET:

    System.Data: определяет классы, интерфейсы, делегаты, которые реализуют архитектуру ADO.NET

    System.Data.Common: содержит классы, общие для всех провайдеров ADO.NET

    System.Data.Design: определяет классы, которые используются для создания своих собственных наборов данных

    System.Data.Odbc: определяет функциональность провайдера данных для ODBC

    System.Data.OleDb: определяет функциональность провайдера данных для OLE DB

    System.Data.Sql: хранит классы, которые поддерживают специфичную для SQL Server функциональность

    System.Data.OracleClient: определяет функциональность провайдера для баз данных Oracle

    System.Data.SqlClient: определяет функциональность провайдера для баз данных MS SQL Server

    System.Data.SqlServerCe: определяет функциональность провайдера для SQL Server Compact 4.0

    System.Data.SqlTypes: содержит классы для типов данных MS SQL Servera

    Microsoft.SqlServer.Server: хранит компоненты для взаимодействия SQL Server и среды CLR

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

Функционально классы ADO.NET можно разбить на два уровня: подключенный и отключенный. Каждый провайдер данных.NET реализует свои версии объектов Connection, Command, DataReader, DataAdapter и ряда других, который составляют подключенный уровень. То есть с помощью них устанавливается подключение к БД и выполняется с ней взаимодействие. Как правило, реализации этих объектов для каждого конкретного провайдера в своем названии имеют префикс, который указывает на провайдер:

Другие классы, такие как DataSet, DataTable, DataRow, DataColumn и ряд других составляют отключенный уровень, так как после извлечения данных в DataSet мы можем работать с этими данными независимо от того, установлено ли подключение или нет. То есть после получения данных из БД приложение может быть отключено от источника данных.

Тем, кто пишет запросы в коде страницы посвящается...

Приветствую всех!

На хабре есть немного информации о том, что в следующей версии VisualStudio 2008 будет ADO.NET EntityFramework. (Открою секрет, эта версия уже появилась.) Эта разработка представляет собой универсальный фреймворк, который позволяет создавать даталогику вашего проекта в пару кликов мыши.
До сих пор, работая с даталогикой, я сталкивался с 2 видами проектов. Первые были созданы на небезызвестном фреймворке NHibernate , другие реализовывали даталогику программистами. Я уже 3 года занимаюсь написанием и разработкой различных систем и всё это время разрабатывал логику работы с данными исключительно ручками.
И вот, на днях, после того, как я поставил новую винду, я скачал VisualStudio WebDeveloper Express, и с радостью обнаружил в комплекте поставки ADO.NET EntityFramework. Через некоторое время зарегистрировал домен, создал простенький сайт, и начал тренировать свои силы в написании программ под этот фреймворк.

Для начала необходимо создать простой Web проект с базой данных. К базе данных тоже неплохо было бы подключится сразу через DataBase Explorer. Просто потом будет удобнее.

После этого, в проект надо добавить новый элемент «ADO.NET Entity Data Model».

Системе надо будет указать строку для соединения с базой, а так же указать, откуда возьмётся первая модель ADO.NET EF.

В своей БД я уже имею две очень простых таблицы Post и User, поэтому не мудрствуя лукаво, я заставил систему создать модель на основе моей БД. После всех этих, очень простых действий, я получил рабочую модель БД. Более того, изучив эту модель визуально, я не забыл заглянуть в код, и посмотреть, как же фрейворк описывает все мои классы?

  1. namespace DataBaseCore
  2. ///
  3. /// There are no comments for DbModel in the schema.
  4. ///
  5. public partial class DbModel: global::System.Data.Objects.ObjectContext
  6. ///
  7. /// Initializes a new DbModel object using the connection string found in the "DbModel" section of the application configuration file.
  8. ///
  9. public DbModel() :
  10. base ("name=DbModel" , "DbModel" )
  11. this .OnContextCreated();
  12. /* Урезал за ненадобностью */
  13. public partial class Post: global::System.Data.Objects.DataClasses.EntityObject
  14. ///
  15. /// Create a new Post object.
  16. ///
  17. /// Initial value of Id.
  18. public static Post CreatePost(int id)
  19. Post post = new Post();
  20. post.Id = id;
  21. return post;

Намётанный глаз специалиста по работе с даталогикой показал наличие достаточно простого и изящного класса, который позволил работать как с постами в системе, так и с пользователями.

Ну, что же, код у нас уже есть, осталось только его начать использовать. И тут, нам открываются все прелести и возможности ASP.NET. Среди немалого количества источников данных на странице я увидел Entity Data Source, который с удовольствием предоставляет данные по запросу из нашего класса. Перетаскиваем его на форму, запускаем мастер настройки, и быстренько цепляем датасорс на нашу таблицу постов.

Несомненно, намного приятнее стало выглядеть описание датасорца в ASPX коде.

  1. < asp:EntityDataSource ID ="dsPosts" runat ="server" ConnectionString ="name=DbModel"
  2. DefaultContainerName ="DbModel" EntitySetName ="Post" >
* This source code was highlighted with Source Code Highlighter .

Можно сказать - блещет изяществом.

После появления на форме провайдера данных, нужен и потребитель. Не умничая, я добавил простенький код, который просто отображает все посты последовательно.

  1. < asp:Repeater runat ="server" ID ="repPosts" DataSourceID ="dsPosts" >
  2. < HeaderTemplate >
  3. < ItemTemplate >
  4. < div >
  5. < h3 >
  6. < asp:Label ID ="lblHeader" runat ="server" Text ="<%# Eval("Header") %>" >
  7. < p >
  8. < asp:Label ID ="lblText" runat ="server" Text ="<%# Helpers.TypographText(Eval("Text").ToString()) %>" >
* This source code was highlighted with Source Code Highlighter .

И вот тут заканчивается самая простая часть моего повествования. До сих пор, всё что было сделано, можно повторить при помощи мыши. Это было достаточно просто. Мы только что создали объектно-ориентированное представления БД, и используя это представление, начали выводить данные из базы на страницу. При этом, мы ни разу не написали ни одного запроса, не получали данные из базы напрямую, etc…

Но, что же выводить пользователю, если у нас нет ничего в БД? Нехорошо. Надо написать форму заполнения базы. Теперь мы бросим мышепрограммирование, и займёмся написанием кода.

Я сделал два самых базовых действия для работы с постами в системе - это добавление и удаление. Сделать редактирование по аналогии с этим кодом не составит труда ни для кого.

  1. namespace DBW
  2. public class Post
  3. public Post()
  4. public static void New(String PostText, String PostHeader, Int32 UserId)
  5. p.Header = PostHeader;
  6. p.Text = Helpers.TypographText(PostText);
  7. p.PublishDate = DateTime .Now;
  8. p.User = (from usr in m.User where usr.Id == UserId select usr).First();
  9. m.AddToPost(p);
  10. m.SaveChanges();
  11. public static void Delete(Int32 PostId)
  12. DataBaseCore.DbModel m = new DataBaseCore.DbModel();
  13. DataBaseCore.Post p = new DataBaseCore.Post();
  14. p = (from pst in m.Post where pst.Id == PostId select pst).First();
  15. m.DeleteObject(p);
  16. m.SaveChanges();
* This source code was highlighted with Source Code Highlighter .

Казалось бы, всё просто, и да, это так. Но есть пара нюансов.
Во-первых - это LINQ. Без него в ADO.NET никуда. Так что не стоит отлынивать и вообще забивать на SQL или LINQ, писать запросы всё равно придётся.
Во-вторых - этот код автоматически генерируется фреймворком, поэтому особого удобства в некоторых моментах ожидать не придётся, и всегда надо быть готовым изменить уже созданный студией код. Например, тут в строке 16 было бы удобнее использовать не объект типа пользователь, который мне пришлось выбирать из БД, а сразу передавать значение идентификатора пользователя. Так было бы удобнее для этого кода, но это не универсально. Поэтому код нуждается в доработке и переосмыслении. Возможно просто надо передавать не идентификатор пользователя, а объект типа пользователь.

Что дальше? Дальше я буду продолжать писать проект, углубляясь в дебри ADO.NET Entity Framework, и буду с удовольствием делиться своими изысканиями с вами, уважаемые хабраюзеры. Соответственно, будут новые статьи, с более серьёзными и глубокими данными.

UPD. Тема очень обширная. Здесь не раскрыто и процента возможностей, но продолжение будет 8-)

Технологии ADO .NET, . NET FrameWork, CORBA

Технология доступа к удаленным базам данных ADO .NET была разработана также для архитектуры клиент - сервер. Кроме двух уров­ней удаленных баз данных - клиентского и серверного - появля­ются дополнительные уровни - серверы бизнес-логики, реализу­ющие бизнес-логику приложений.

Технология ADO .NET устанавливает следующую схему рабо­ты клиента с сервером баз данных:

Установка соединения с сервером;

Получение необходимых данных;

Закрытие соединения;

Обработка данных;

Установка соединения для передачи измененных данных об­ратно на сервер.

Основу ADO .NET составляют два основных модуля:

Провайдер данных (Data Provider .NET FrameWork)

Резидентная реля­ционная база данных (DataSet).

Провайдер данных , как это следует из его название, отвечает за связь приложения с источником данных и за манипуляцию дан­ными. Провайдер данных включает в себя следующие объекты ма­нипулирования данными:

а) Connection используется для установления соединения с источ­ником данных, а также для управления транзакциями.

б) Command позволяет манипулировать данными источника, а также выполнять хранимые процедуры. При этом могут ис­пользоваться параметры для передачи данных в обоих направ­лениях.

в) DataAdapter служит связующим звеном между резидентной БД DataSet и источником данных и использует обычно объект Command для выполнения команд SQL как при заполнении DataSet данными, так и при обратной передаче измененных клиентом данных к источнику. Для выполнения этих функций в нем имеют­ся четыре метода: SelectCommand, InsertCommand, UpdateCommand и DeleteCommand.

г) DataReader обеспечивает получение данных от источника только для считывания. Если приложение клиента не модифицирует данные и не требуется произвольная выборка данных, а достаточно их однократного просмотра, то использование DataReader вместо DataSet позволит сохранить ресурсы компьютера, а также повы­сить быстродействие приложения.

Резидентная реляционная база данных представляет собой по­лученную клиентом реляционную БД, которая сохраняется в его резидентной оперативной памяти.

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

Такая схема взаимодействия в некоторой степени походит на работу архитектуры файл -

сервер и часто применяется предприятиями при работе с удален­ными базами данных через глобальную сеть Интернет.

Для обеспечения доступа к объектам через глобальную сеть Ин­тернет в составе ADO .NET и был предусмотрен модуль.NET FrameWork обеспечивающий взаимодействие между различными форматами представления данных, в том числе HTML и XML.

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

Возможность взаимодействия между данными различных фор­матов, в том числе HTML и XML;

Значительное снижение затрат при работе с удаленными ба­зами данных через глобальную сеть Интернет.