Использование визуальной среды для работы с ADO .NET
Когда мы перетаскиваем на форму элемент управления, Visual Studio .NET автоматически генерирует код, описывающий этот элемент. Если при размещении кнопок, текстовых полей и других элементов управления создавать их программно нецелесообразно, то при работе с элементами данных все как раз наоборот - лучше всего создавать все объекты ADO .NET вручную, что обеспечивает большую гибкость приложения. Тем не менее на первых порах использования ADO .NET полезно работать с визуальной средой разработки.
Рассмотрим работу с базой данных Microsoft Acсess xtreme1), входящей в состав Microsoft Visual Studio.NET, и другую - с базой Microsoft SQL2) NorthwindCS . В каждой базе есть таблица Customer(s)3). Наша задача - вывести содержимое двух таблиц Customer на две Windows-формы.
Microsoft Access, база данных xtreme | Microsoft SQL, база данных NorthwindCS |
Запустите Visual Studio .NET, создайте новый проект, тип проекта - Windows Application.
Назовите его VisualDataMDB | Назовите его VisualDataSQL |
Размещаем на создавшейся форме элемент управления DataGrid, свойству Dock устанавливаем значение "Fill". Теперь в окне ToolBox переходим на закладку Data (рис. 2.8).
Рис. 2.8. На вкладке Data находятся все элементы управления для работы с ADO.NET
Поместите на форму объект OleDbDataAdapter | Поместите на форму объект SqlDataAdapter |
Перед нами появляется мастер настройки элемента управления. Для OleDbDataAdapter этот мастер - тот же самый, который был описан и изображен на рис. 2.2 - 2.3. Вернитесь к этим рисункам и сконфигурируйте эти два шага OleDbDataAdapter самостоятельно. Для SqlDataAdapter на вкладке "Поставщик данных" по умолчанию выбран необходимый поставщик (рис. 2.9).
Рис. 2.9. Поставщик данных Microsoft OLE DB Provider for SQL Server
Нажимаем кнопку "Далее" (или переходим на вкладку "Подключение") (рис. 2.10).
Рис. 2.10. Определение параметров подключения
Для подключения к базе данных SQL, расположенной на вашем компьютере, в пункте 1 вводим (local) или просто точку - ".".
В пункте 2 используем учетные сведения системы: по умолчанию пароль учетной записи администратора SQL Server - пустой. В пункте 3 выбираем базу данных NorthwindCS.
В следующем шаге мастера - определение типа запроса. Параметры, предлагаемые мастером, будут отличаться (рис. 2.11 и рис. 2.12):
Рис. 2.11. Определение типа запросов объекта OleDbDataAdapter
Рис. 2.12. Определение типа запросов объекта SqlDbDataAdapter
Для базы данных Microsoft Access мы можем только использовать SQL-запросы - другие значения не активны. Для базы данных Microsoft SQL Server мы можем либо применять SQL-запросы, либо создать новую хранимую процедуру (stored procedure), либо использовать существующую хранимую процедуру. Различия подобного рода определяются типом баз данных. Для объекта SqlDataAdapter оставляем значение, предложенное по умолчанию: использование SQL-запросов.
В следующем шаге - создание SQL-запросов (Generate SQL statements) - мы можем вводить текст запроса непосредственно. Но удобнее всего воспользоваться "Построителем запросов": нажимаем на кнопку "Query Builder_" (рис. 2.13). Поскольку окна добавления таблиц для обеих баз данных одинаковы - незначительно различается лишь содержимое, - я привожу рисунок для OleDbDataAdapter:
Рис. 2.13. Добавление таблицы в окно Построителя запросов
Выбираем таблицу Customer (Customers), нажимаем кнопку Add и затем Close. Затем в окне Query Builder выбираем все столбцы (All Colimns), как показано на рис. 2.14:
Рис. 2.14. Добавление столбцов. Поставив галочку напротив пункта (All Columns), мы извлекаем все столбцы из таблицы
Нажимаем кнопку OK. В окне "Generate the SQl statements", к которому мы вернулись, приводится SQL- запрос, созданный мастером:
SELECT Customer.* FROM Customer | SELECT Customers.* FROM Customers |
Нажимаем кнопку Next. В окне "Обзор результатов мастера" ( View Wizard Results) приводится список результатов работы мастера. Вид этого списка может отличаться, как это изображено на рис. 2.15 и 2.16:
Рис. 2.15. Список результатов работы мастера объекта OleDbDataAdapter
Рис. 2.16. Список результатов работы мастера объекта SqlDbDataAdapter
Чем обусловлено это различие? Для базы данных Access мастером создана возможность не только просмотра данных из базы данных - SQL-запрос SELECT, но и возможность ее изменения - запросы INSERT, UPDATE, DELETE. Для базы данных SQL Server создана лишь возможность просмотра базы данных. Для изменения данных необходимо проходить авторизацию (см. рис. 2.10) с учетной записью администратора базы данных.
Нажимаем кнопку Finish. Для объекта OleDbDataAdapter возникает окно (см. рис. 2.6), которое мы уже описывали выше.
Мастер создал на панели компонент по два элемента: oleDb DataAdapter1 и oleDbConnection1 для VisualDataMDB и sqlDbData Adapter1 и sqlDbConnection1 для VisualDataSQL. oleDbDataAdapter1 (или sqlDbDataAdapter1) является основным компонентом типа OleDbData Adapter (или SqlDataAdapter), который мы создавали при помощи мастера. Объект oleDbConnection1 (или sqlDbConnection1) был создан мастером как необходимый элемент подключения к базе. Образно говоря, мы получили адаптер (DataAdapter1) и вилку (Connection1) для подключения к источнику данных. Теперь нам необходимо добавить объект DataSet - тот самый "буфер", в котором будет храниться информация, полученная из базы данных. Щелкаем на oleDbDataAdapter1 (или sqlDbDataAdapter1), для его выделения. Открываем свойства этого элемента. На и нформационной панели щелкаем на ссылку "Generate DataSet" для создания объекта DataSet4) (рис. 2.17).
Рис. 2.17. Создание DataSet
В появившемся окне "Generate DataSet" задаем имена - dsCustomer и dsCustomers соответственно.
Итак, все "невидимые" части механизма подключения к базе данных у нас уже есть.
Осталось теперь связать видимый интерфейс с данными. Объектом, отображающим данные на форме, у нас является dataGrid1. В свойстве этого элемента DataSource (источник данных) выбираем в качестве источника созданный объект dsCustomer1 (рис. 2.18).
Рис. 2.18. Определение источника данных для элемента управления dataGrid1
На форме в режиме дизайна у нас немедленно появилась символическая таблица со знаком (+). Последнее, что нам осталось сделать, - это заполнить объект DataSet (здесь - dsCustomer1). Переходим в код форм и вносим соответствующие добавления:
using System.Data.OleDb; // Подключаем пространство имен для работы с поставщиком OleDb
private void Form1_Load(object sender, System.EventArgs e) { oleDbDataAdapter1.Fill(dsCustomer1); }
using System.Data.SqlClient; // Подключаем пространство имен для работы с поставщиком SQL
private void Form1_Load(object sender, System.EventArgs e) { sqlDataAdapter1.Fill(dsCustomers1); }
В обоих случаях в методе загрузки формы вызываем метод Fill объекта oleDbDataAdapter1 (или oleDbDataAdapter1) и передаем ему в качестве параметра dsCustomer1. Опять же, говоря образно, мы "заливаем" данные из адаптера в DataSet, который затем распоряжается ими - здесь мы определили, что DataSet выступает в качестве источника данных для dataGrid1.
Запустите приложения. Щелкните на знак (+), а затем на ссылку "Customer". Готовые приложения будут иметь следующий вид (рис. 2.19 и 2.20):
Рис. 2.19. Готовое приложение VisualDataMDB
Рис. 2.20. Готовое приложение VisualDataSQL
В программном обеспечении к курсу вы найдете эти приложения5) - Code\Glava1\VisualDataMDB и VisualDataSQL.