MSNET
narod.ru
Путеводитель по ADO.NET

Оглавление

Главная страница

Новости технологий

Статьи, документы

Контакты

Пишите письма


 Назад  Содержание  Дальше  

1. Введение в ADO.NET

ADO.NET - это модель доступа к данным в приложениях .NET. Ее можно использовать для доступа как к реляционным базам данных, таким как Microsoft SQL server 2000, так и к другим источникам данных, для которых существуют OLE DB провайдеры. С одной стороны, ADO.NET представляет просто очередной этап развития технологии ADO, но, с другой стороны, ADO.NET предлагает фундаментальные нововведения, направленные на развитие в первую очередь Web-приложений, для которых характерно использование слабо связанных, фактически оторванных от источников наборов данных.

Одно из ключевых изменений в ADO.NET связано с заменой объекта ADO Recordset комбинацией новых объектов: DataTable, DataSet, DataAdapter и DataReader. Объект DataTable представляет коллекцию строк из одной таблицы и в этом отношении соответсвует объекту Recordset. Объект DataSet, в свою очередь,представляет коллекцию объектов DataTable, а также связывающие их отношения и ограничения. В сущности DataSet представляет собой реляционную структуру в памяти со встроенной поддержкой языка XML.

Одна из ключевых особенностей объекта DataSet состоит в том, что этот объект ничего не знает об источнике данных, который использовался для его заполнения. Это несвязанная самостоятельная сущность, используемая для представления коллекции данных, которую можно передавать в рамках распределенного приложения от одного компонента другому. Для передачи данных между источником данных и объектом DataSet в ADO.NET используется объект DataAdapter. Кроме того, он обеспечивает выполнение усовершенствованных функций пакетного обновления данных, ранее относившихся к объекту Recordset.

Провайдеры данных на платформе .NET

ADO.NET пользуется услугами провайдеров данных .NET. Они (провайдеры) обеспечивают доступ к низлежащим источникам данных и включают четыре ключевых объекта: Connection, Command, DataReader и DataAdapter. В настоящее время в состав поставки ADO.NET включено два основных провайдера:

  • SQL Server .NET Data Provider - это провайдер для Microsoft SQL server 7.0 и более поздних версий. Этот провайдер оптимизирован для доступа к SQL server и использует его внутренний протокол для работы с данными. Используйте его, если вы собираетесь работать с данными Microsoft SQL server 7.0 или 2000.
  • OLE DB .NET Data Provider - это управляемый провайдер для работы с любыми источниками данных по протоколу OLE DB. Этот провайдер менее эффективен, чем предыдущий, так как реализует доступ к данным через прослойку OLE DB. Необходимо помнить, что этот провайдер не поддерживает работу с OLE DB провайдером для ODBC (MSDASQL). Для работы с источниками данных через ODBC следует использовать ODBC .NET Data Provider.

Кроме перечисленных, .NET предлагает следующие виды провайдеров для работы с данными:

  • ODBC .NET Data Provider - обеспечивает "родной" интерфейс для работы с ODBC-драйверами.
  • Управляемый провайдер для получения XML-данных в среде SQL server 2000.

Пространства имен

Типы (под типами .NET понимает классы, структуры, перечисления и т.д.), связанные с каждым провайдером данных, описаны в отдельном пространстве имен:

  • System.Data.SqlClient содержит типы, относящиеся к SQL Server .NET Data Provider.
  • System.Data.OleDb содержит типы, относящиеся к OLE DB .NET Data Provider.
  • System.Data.Odbc содержит типы, относящиеся к ODBC .NET Data Provider.
  • System.Data содержит типы, не зависимые от конкретных провайдеров, например, DataSet и DataTable.

В соответствующем пространстве имен для каждого провайдера хранится реализация специфичных для него объектов: Connection, Command, DataReader и DataAdapter. Имена объектов в пространстве имен SqlClient начинаются с префикса Sql (например, SqlConnection), аналогично в пространстве OleDb - с OleDb (например, OleDbConnection).

Основы программирования

Если вы хотите иметь возможность обращаться к различным источникам данных, использую один и тот же код, имеет смысл воспользоваться интерфейсами IDbConnection, IDbCommand, IDataReader и IDbDataAdapter, определенными в пространстве имен System.Data. Все реализации объектов Connection, Command, DataReader и DataAdapter должны поддерживать эти интерфейсы.

Приведенный ниже рисунок показывает возможные варианты доступа к данным с помощью ADO.NET и других технологий, включающих ADO и OLE DB. 

Хранимые процедуры или непосредственные вызовы SQL операторов

В большинстве примеров, которые вы встретите в этой статье, манипуляции с базой данных выполняются путем обращения к хранимым процедурам посредством объектов SQLCommand. В некоторых случаях вы не увидите объекта SQLCommand, так как имя хранимой процедуры передается непосредственно объекту SQLDataAdapter, хотя в результате все равно выполняется вызов SQLCommand.

Для доступа к данным рекомендуется использовать именно хранимые процедуры, а не непосредственные вызовы SQL операторов. Это обусловлено следующими причинами:

  •  Хранимые процедуры обычно повышают производительность при работе с данными, так как сервер базы данных берет на себя оптимизацию плана запроса и помещает его в кэш для последующих обращений
  • В рамках базы данных каждой хранимой процедуре могут быть назначены индивидуальные права доступа. Клиенту могут быть предоставлено право вызова процедуры, при этом он может не иметь прав доступа к лежащим в ее основе таблицам
  • Хранимые процедуры легче сопровождать, так как модифицировать хранимую процедуру проще, чем SQL-операторы, закодированные в откомпилированном приложении
  • Хранимые процедуры вносят дополнительный уровень абстракции, отдаляя клиента от схемы базы данных
  • Хранимые процедуры позволяют снизить сетевой трафик, потому что позволяют за один вызов выполнить пакет SQL-операторов, минимизируя количество обращений клиента к серверу.

Свойства или аргументы конструктора

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

// Использование аргументов конструктора
SqlCommand cmd = new SqlCommand("SELECT * FROM PRODUCTS", conn);

// Индивидуальное задание свойств
sqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT * FROM PRODUCTS";

С точки зрения производительности кода эти два подхода практически идентичны, так как операции считывания и задания (set/get) свойств в .NET объектах выполняются более эффективно, чем в COM-объектах. 

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

В прошлом специалисты Microsoft предостерегали Visual Basic программистов от использования конструкции "Dim x As New…". В мире COM такой прием мог привести к появлению различных ошибок в работе программы. Однако в мире .NET вы можете спокойно использовать эту конструкцию, никаких ограничений теперь нет.

 Назад  Содержание  Дальше  
Hosted by uCoz