Специфические для провайдера средства

вообще говоря вам нужно выработать

Если вам требуется подключить специфические для провайдера средства, такие, как обработка XML в SQL Server, то вам нужно будет работать с классами, специфическими для провайдера, а не с интерфейсами или обобщенными классами. Вообще говоря, вам нужно выработать единообразный подход в программировании объектов провайдеров, а не прибегать в одних случаях к интерфейсам, а в других — к специфическим для провайдера классам. Вы должны будет решить, какой подход является наилучшим, исходя из потребностей вашего приложения и той степени, в какой ваш код должен быть переносим на различные платформы. В качестве простого примера работы со специфическим провайдером следующий код показывает, как открыть соединение с базой данных SQL Server и исполнить команду для заполнения DataSet При помощи SqlDataAdapter: Более подробно о той магии, что происходит в этом методе Fill, Я буду рассказывать позднее. В данный момент я хочу дать лишь общий обзор. Когда вам нужно загрузить в память все данные, используйте набор данных, чтобы в клиенте или среднем ярусе можно было работать с ним как с целым. Каждый управляемый провайдер реализует также другое средство извлечения данных от запроса, называемое считывателем данных. Например, управляемый провайдер SQL Server реализует класс с именем SqlDataReader. Вы можете рассматривать считыватель данных как быстрый, перемещающийся только вперед потоковый указатель, который можно использовать для итерации по результатам запроса. Имеются средства привязки считывателя данных к элементам управления Windows Forms посредством компонента BindingSource, Но я бы не рекомендовал такого рода методику, поэтому не буду касаться ее деталей. Привязка считывателя данных к элементам управления Windows Forms приводит к сильному сопряжению яруса представления и яруса данных. Если это очень небольшое приложение, и вы ищете самый быстрый способ обеспечить представление данных пользователю, то это будет приемлемо. Однако в полномасштабных приложениях для бизнеса этого следует избегать. Использование считывателей данных в ярусе представления потенциально держит соединение открытым дольше, чем это необходимо, ограничивая масштабируемость, а также тесно сопрягает клиент со схемой данных в ярусе данных. Однако считыватели данных являются быстрейшим средством итерации по строкам, возвращаемым от запроса, поэтому вы, возможно, захотите их использовать, если собираетесь сбрасывать результаты запроса в коллекцию рабочих объектов, а не применять наборы данных. Позднее в этом приложении я покажу такой пример.