Поддержка баз данных в VB .NET

  • Почему ADO .NET — не ADO++
  • Автономные наборы данных: новый подход к работе с базами данных
  • Классы сборки System.Data.DLL
  • Пространство имен System.Data.OleDb
  • System.Data.SqlClient
  • Вызов хранимой процедуры
  • Нетривиальный пример работы с базами данных в VB .NET
  • Столь короткая глава была написана с единственной целью — ориентировать читателя в нужном направлении. Ее ограниченный объем не позволит нам даже в общих чертах представить все средства для работы с базами данных в VB .NET (не говоря уже об их содержательном обсуждении).

    Чтобы увидеть, как работают элементы, связанные с данными (data-bound controls), воспользуйтесь мастером Data Form Wizard. Просмотр кода, сгенерированного этой программой, поможет вам больше узнать о возможностях VB. NET в области работы с базами данных.

     

    Почему ADO .NET — не ADO++

    В каждой из предыдущих версий VB появлялась новая модель поддержки баз данных. VB .NET следует этой давней традиции и представляет новый способ работы с данными — ADO .NET. При ближайшем рассмотрении выясняется, что название выбрано крайне неудачно. Почему? Потому что ADO .NET просто не является следующим поколением ADO! Это совершенно новая модель, не имеющая ничего общего с классическим вариантом ADO. В частности, для работы с результатами вам придется освоить новую объектную модель, основанную на объекте DataSet (объект ADO .NET DataSet не привязан к одной таблице и поэтому обладает значительно большими возможностями, чем, например, объект ADO RecordSet). Кроме того, модель ADO .NET:

  • проектировалась как модель с полиостью автономной архитектурой (хотя классы DataAdapter, Connection, Command и DataReader остаются ориентированными на соединение);.
  • не поддерживает курсоры на стороне сервера. Динамические курсоры ADO в ней не поддерживаются;
  • базируется на языке XML [ Во внутреннем представлении классов ADO .NET используется оптимизированный формат, но весь обмен данными происходит в формате XML. ] (что позволяет работать через Интернет, даже если клиент находится за. брандмауэром (firewall));
  • входит в сборку .NET System. Data. DLL, а не реализуется на уровне языка;
  • вряд ли будет поддерживать старые клиенты Windows 95.
  • Еще одна интересная особенность ADO .NET заключается в том, что для таких важных средств, как двухфазная актуализация данных (commit), потребуется использовать Enterprise Services (то есть фактически COM+/MTS с .NET-оболочкой).

     

    Автономные наборы данных: новый подход к работе с базами данных

    В VB6 типичное приложение, использовавшее базы данных, открывало соединение с базой и использовало его для всех запросов на протяжении жизненного цикла программы. В VB .NET доступ к базам данных средствами ADO .NET обычно основан на автономных (отсоединенных) операциях. За этим высокопарным выражением кроется простой смысл: в большинстве случаев после выборки данных из базы соединение разрывается. В ADO .NET постоянная связь с источником данных встречается очень редко (при желании вы можете использовать постоянные соединения классической модели ADO, прибегнув к услугам .NET COM Interop, однако при этом неизбежно возникают проблемы масштабируемости, издавна присущие ADO).

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

    Кроме того, в web-комплексах [ Web-комплексом называется группа компьютеров, обрабатывающих трафик одного URL. Большинство крупных сайтов обслуживается web-комплексами, обеспечивающими более эффективное распределение нагрузки. ](Web farm) запросы могут обрабатываться разными компьютерами. Постоянные соединения с web-комплексами бесполезны, поскольку вы не знаете, какой сервер будет обрабатывать последующие запросы.

     

    Классы сборки System.Data.DLL

    Сборка System.Data.DLL содержит большое количество классов, разделенных на пять пространств имен работы с данными с дополнительным пространством

    System.Xml. Вспомогательное пространство System.Data.SqlTypes содержит структурные типы, соответствующие типам данных SQL Server (например, Sql Money и SqlDateTime).

    Поскольку типы данных SQL реализованы в виде структурных типов, их преобразования отличаются большей эффективностью по сравнению с другими языками — например, по сравнению с Java, где типы SQL реализованы в виде ссылочных типов.

    Другое вспомогательное пространство имен, System.Data .Common, содержит классы, часто используемые при обращениях к источнику данных. В этой главе основное внимание уделяется пространствам имен System. Data.OleDb и System. Data. SqlCLient, выполняющим непосредственную работу. Классы этих пространств имен используют средства System. Data. Common, включая класс DataAdapter. Класс DataAdapter представляет соединение с базой данных, используемое при заполнении набора данных или обновлении источника, а также некоторые стандартные команды при операциях с базами данных.

    Пространства имен System.Data.OleDb и System.Data.SqtCLient обладают сходной функциональностью, с одним исключением — классы System.Data.OleOb предназначены для подключения к источникам данных OLE DB, а классы System.Data.SqlCHent ориентированы на Microsoft SQL Server версии 7 и выше.