Получение коллекции персон из базы данных
Модернизируем наш проект. Теперь будет не создавать персон (товарищ Быстров и товарищ Семшов), а брать тех, кто храниться в базе данных. Для этого необходимо перейти в класс «PersonList» в проекте «PersonLibrary». В методе «GetDefaultPersonList» необходимо удалить код, который создает персон. Оставить только строчку создания коллекции «myList» и возврат это пустой коллекции. Код показа на рисунке 1.
Рис. 1 «Очистка» кода по созданию персон «в ручную»
Теперь до того момента, когда коллекция возвращается (return), необходимо внести код, который будет заполнять эту коллекцию персонами из базы данных. Для этого понадобятся встроенные механизмы C# по работе с базами данных. Чтобы эти механизмы были доступны, необходимо добавить ссылку на них. В классе «PersonList» добавить два «using» (System.Data и System.Data.SqlClient), как показано под цифрой 1 на рисунке 2.
После добавления ссылок можно использовать полезные классы C# по работе с базами данных. Первый такой класс – это «SqlConnection». Его назначение – соединение с базой данных. Добавление экземпляра класса с название «cn» показано на рисунке 2 под цифрой 2.
Рис. 2 Добавление ссылок и использование класса «SqlConnection»
Далее укажем строку подключения к базе данных. Для этого используем свойство «ConnectionString». Строка подключения показана на рисунке 3.
В стоку необходимо внести изменения, по сравнению с тем, что показано на рисунке 3. Под цифрой 1 на рисунке 3 необходимо указать имя своего Sql Server (вместо «COMP»). Имя Sql Server можно узнать при запуске Sql Server (в первом окне при запуске второе поле). Под цифрой 2 на рисунке 3 указывается название базы данных в Sql Server. Если имя отличается от «PersonDB», то укажите свою базу данных.
Рис. 3 Добавление строки подключения к базе данных
Далее добавляется код открытия соединения с базой данных (цифра 1 на рисунке 4) и создания команды по вызову хранимой процедуры (цифра 2 на рисунке 4). Название хранимой процедуры (на рисунке 4 называется «GetPersonList») необходимо посмотреть в Sql Server.
Рис. 4 Открытие подключения к базе данных и создание вызова хранимой процедуры
Далее добавляется код по выполнению хранимой процедуры (цифра 1 на рисунке 5) и цикл для чтения строк таблицы, которую должна вернуть из Sql Server хранимая процедура (цифра 2 на рисунке 5). Таким образом будет выполнена хранимая процедура, которая вернет результат в виде таблицы в специальный класс «SqlDataReader». Далее запускается цикл, который «пробегает» по всем строкам (если они есть) полученной таблицы. Весь код показан на рисунке 5.
Рис. 5 Выполнение хранимой процедуры и цикл чтения результата
Далее внесем код тело цикла. В цикле обрабатываются по очереди строки из таблицы. Необходимо для каждой строки создавать новый класс «PersonInfo» (каждая строчка это данные для отдельного человека), и заполнять этот новый класс данными из обрабатываемой строки. Код для тела цикла показан на рисунке 6. Под цифрой 1 создается новый пустой класс «PersonInfo».
Под цифрой 2 на рисунке 6 устанавливается имя для персоны. Здесь у строчки «dr» считывается столбец «PersonFirstName». Так как любое поле строки автоматически C# трактует как абстрактный объект, то необходимо привести к строке (метод «ToString»).
Аналогично под цифрой 3 на рисунке 6 устанавливается фамилия для персоны. Здесь у этой же строчки «dr» считывается теперь столбец «PersonSecondName» и также приводится к строке (метод «ToString»).
Под цифрой 4 на рисунке 6 устанавливается дата рождения для персоны. Обратите внимание, что для даты используется не приведение к строке («ToString»), а к дате («DateTime»). Причем, для привода к строке используется встроенный у всех объектов C# метод «ToString» (ставится в конце), а для привода к дате или любому другому типу (например, к «int», «decimal», «float» и т.д.) используется другой механизм (вначале ставятся скобки с типом к которому необходимо привести).
Под цифрой 5 на рисунке 6 показано добавление новой персоны (с уже заполненными данными) в коллекцию «myList».
Рис. 6 Цикл заполнения персоны данными из базы данных
Теперь можно запустить и проверить, как работает проект. Если все сделано правильно, то будут отображаться персоны из базы данных. Правильная работа показана на рисунке 7.
Рис. 7 Выполнение запроса из базы данных
Если же в коде по работе с базой данных были сделаны ошибки, то при запуске будет следующее. Первый вариант, если ошибка в строке подключения, то программа остановится на строке «cn.Open», как показано на рисунке 8. Для исправления ошибки внимательно посмотрите текст строки подключения (проверьте имя сервера и имя базы данных).
Рис. 8 Ошибки при неправильной строке подключения
Если ошибка при выполнении хранимой процедуры, то программа остановится на строке, показанной на рисунке 9. Для исправления, необходимо перейти в SQL Server и проверить правильно ли работает там хранимая процедура.
Рис. 9 Ошибки при выполнении хранимой процедуры
Если ошибка будет в теле цикла, это означает, что таблица, которую возвращает хранимая процедура имеет данные в непонятном для C# формате. Например, на рисунке 10 под цифрой 1 показано, что поле «PersonFirstName» может быть пустым (null). Или под цифрой 2 может дата передана в неправильном формате. Для исправления ошибки, необходимо перейти в SQL Server, выполнить хранимую процедуру и сравнить данные, которая она возвращает (в самом SQL Server) с теми переменными в которые она передается в теле цикла в C#.
Рис. 10 Ошибка при чтении данных из хранимой процедуры
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.