Как создать запрос в visual studio
Пример создания запроса ( Query ) в базе данных MS SQL Server . База данных размещена в локальном файле *.mdf
Содержание
- Условие задачи
- Выполнение (пошаговая инструкция)
- 1. Загрузить Microsoft Visual Studio
- 2. Подключить базу данных Education.mdf к перечню баз данных утилиты Server Explorer
- 3. Добавление нового запроса. Команда «New Query»
- 4. Добавление вычисляемого поля Average
- 5. Запуск запроса на выполнение. Команда «Execute SQL»
Поиск на других ресурсах:
Условие задачи
Задана база данных, которая размещается в файле Education.mdf . База данных содержит две связанные между собою таблицы Student и Session .
Таблицы связаны между собою за полем ID_Book .
Используя средства Microsoft Visual Studio создать запрос с именем Query1 , который будет иметь следующую структуру:
Название поля Таблица Num_Book Student Name Student Mathematics Session Informatics Session Philosophy Session Average Вычислительное поле Выполнение (пошаговая инструкция)
1. Загрузить Microsoft Visual Studio
2. Подключить базу данных Education.mdf к перечню баз данных утилиты Server Explorer
Чтобы не тратить время на разработку и связывание таблиц базы данных Education.mdf , архив ранее подготовленной базы данных можно загрузить здесь . После загрузки и сохранения в некоторой папке, базу данных нужно разархивировать и подключить к перечню баз данных утилиты Server Explorer .
Подключение базы данных реализуется одним из нескольких стандартных способов:
- выбором команды «Connect to Database…» с меню Tools ;
- выбором кнопки (команды) «Connect to Database…» из утилиты Server Explorer .
В результате, откроется окно мастера, в котором с помощью нескольких шагов (окон) нужно настроить подключение базы данных.
Рис. 1. Способы добавления/подключения базы данных
Подробное описание того, как осуществляется подключение базы данных типа Microsoft SQL Server в Microsoft Visual Studio , приведено в теме:
После подключения, окно утилиты Server Explorer будет выглядеть как показано на рисунке 2.
Рис. 2. Утилита Server Explorer с подключенной базой данных Education.mdf
3. Добавление нового запроса. Команда «New Query»
К базе данных можно создавать запросы. В нашем случае нужно создать запрос в соответствии с условием задачи.
Запрос создается с помощью команды «New Query» , которая вызовется из контекстного меню (рисунок 3). Чтобы вызвать команду, достаточно сделать клик правой кнопкой мышки в области поля, которое выделено для отображения элементов базы данных Education.mdb . Следует отметить, что запросы не сохраняются системой. Для отображения сохраненных (сложных) запросов используется представление ( Views ).
На рисунке 3 отображено контекстное меню, которое вызывается при нажатии на вкладке Views (представление). В этом меню нужно выбрать команду «New Query» . Эта команда есть в перечне контекстных меню других составляющих базы данных (таблиц, диаграмм и т.п.).
Рис. 3. Команда New Query
В результате откроется окно «Add Table» , в котором нужно выбрать таблицы, данные из которых будут использоваться в запросе (рисунок 4).
Рис. 4. Выбор таблиц, которые будут использоваться в запросе
Для нашего случая нужно выбрать обе таблицы.
В результате окно Microsoft Visual Studio будет выглядеть, как показано на рисунке 5.
Рис. 5. Окно MS Visual Studio после создания запроса
В таблицах нужно выделить поля, которые будут использоваться в запросе. Порядок выбора полей должен соответствовать отображению их в запросе в соответствии с условием задачи. Это означает, что сначала выбираются поля таблицы Student ( NumBook , Name ), а потом выбираются поля таблицы Session ( Mathematics , Informatics , Philosophy ).
Для нашего случая выбор полей изображен на рисунке 6.
Рис. 6. Выбор полей для запроса
Как видно из рисунка 6, в нижней части окна отображается запрос на языке SQL , сформированный системой
4. Добавление вычисляемого поля Average
Чтобы создать вычисляемое поле Average , нужно в окне, где отображается SQL -запрос изменить текст этого запроса. Например:
Добавляется вычислительное поле Average , которое есть средним арифметическим (рисунок 7).
Рис. 7. Добавление вычисляемого поля Average
5. Запуск запроса на выполнение. Команда «Execute SQL»
Чтобы запустить на выполнение запрос, используется кнопка «Execute SQL» (рисунок 8).
В нижней части окна на рисунке 8 изображен результат выполнения запроса.
Рис. 8. Кнопка «Execute SQL» запуска запроса на выполнение и результат выполнения запроса
Другой способ запуска запроса на выполнение – команда «Execute SQL» из меню «Query Designer» .
Приведенные ниже инструкции относятся к Visual Studio. Если вы пользуетесь другой средой разработки, создайте консольный проект со ссылкой на библиотеку System.Core.dll и директиву using для пространства имен System.Linq.
Создание проекта в Visual Studio
Запустите Visual Studio.
В строке меню выберите Файл, Создать, Проект.
Откроется диалоговое окно Новый проект .
В текстовое поле Имя введите другое имя или примите имя по умолчанию и нажмите кнопку ОК.
В обозревателе решений появится новый проект.
Обратите внимание, что проект содержит ссылку на библиотеку System.Core.dll и директиву using для пространства имен System.Linq.
Создание источника данных в памяти
Источником данных для запросов является простой список объектов Student . Каждая запись Student включает имя, фамилию и массив целых чисел, соответствующих их баллам за проведенные в классе тесты. Скопируйте этот код в проект. Обратите внимание на следующие характеристики.
Класс Student состоит из автоматически внедренных свойств.
Каждый учащийся в списке инициализируется соответствующим инициализатором объекта.
Сам список инициализируется инициализатором коллекции.
Вся эта структура данных инициализируется и создается без явных вызовов какого-либо конструктора или прямого доступа к членам. Дополнительные сведения об этих новых возможностях см. в разделах Автоматически внедренные свойства и Инициализаторы объектов и коллекций.
Добавление источника данных
Добавьте класс Student и инициализированный список учащихся в класс Program в проекте.
Добавление нового учащегося в список учащихся
- Добавьте новый объект Student в список Students и введите любое имя и результаты тестирования. Чтобы лучше изучить синтаксис инициализатора объекта, постарайтесь заполнить все данные нового учащегося.
Создание запроса
Создание простого запроса
В методе Main приложения создайте простой запрос, при выполнении которого будет возвращаться список учащихся, набравших в результате тестирования больше 90 баллов. Поскольку выбран весь объект Student , запрос имеет тип IEnumerable . Несмотря на то, что код можно также набрать напрямую, используя ключевое слово var, для демонстрации результатов применяется неявная типизация. (Дополнительные сведения о var см. в разделе var .)
Кроме того переменная диапазона в запросе, student , служит ссылкой на каждый объект Student в источнике и предоставляет доступ к каждому объекту.
Выполнение запроса
Порядок выполнения запроса
Теперь напишите цикл foreach , вызывающий выполнение запроса. Обратите внимание на следующие моменты:
Доступ к каждому элементу в возвращаемой последовательности осуществляется с помощью переменной итерации в цикле foreach .
Эта переменная имеет тип Student , а переменная запроса — совместимый тип IEnumerable .
Добавив код, соберите и запустите приложение, чтобы отобразить результаты в окне Консоль.
Добавление другого условия фильтра
Чтобы сделать запрос более точным, можно объединить несколько логических условий в предложение where . Следующий код добавляет условие, согласно которому запрос возвращает учащихся, которые по первому тесту набрали больше 90 баллов, а по последнему — меньше 80 баллов. Предложение where должно быть аналогично приведенному ниже коду.
Дополнительные сведения см. в разделе Предложение where.
Изменение запроса
Упорядочение результатов
С результатами проще работать, если они упорядочены. Возвращаемую последовательность можно упорядочить по любому доступному полю в исходных элементах. Например, следующее предложение orderby упорядочивает результаты в алфавитном порядке от А до Z, используя фамилии учащихся. Добавьте к запросу следующее предложение orderby , указав его после оператора where и перед оператором select :
Теперь измените предложение orderby таким образом, чтобы результаты были упорядочены по баллам за первый тест в обратном порядке, от наибольшего к наименьшему.
Измените строку формата WriteLine таким образом, чтобы отобразить баллы:
Дополнительные сведения см. в разделе Предложение orderby.
Группировка результатов
Группировка представляет собой полезную возможность в выражениях запросов. Запрос с предложением group создает последовательность групп, в которой каждая группа содержит Key , и последовательность, состоящую из всех членов этой группы. Представленный ниже запрос группирует учащихся, используя в качестве ключа первую букву фамилии.
Обратите внимание на то, что тип запроса изменился. Теперь он создает последовательность групп с типом char в качестве ключа и последовательность объектов Student . Поскольку тип запроса изменился, следующий код изменяет также цикл выполнения foreach :
Запустите приложение и просмотрите результаты в окне Консоль.
Дополнительные сведения см. в разделе Предложение group.
Преобразование переменных в явно типизированные
Набирать код IEnumerables в IGroupings напрямую — далеко не самое увлекательное занятие. Написать тот же запрос и цикл foreach можно быстрее и проще, воспользовавшись переменной var . Ключевое слово var не приводит к изменению типов объектов, оно просто сообщает компилятору о том, что он должен вывести типы логически. Измените тип studentQuery и переменную итерации group на var и выполните запрос заново. Обратите внимание на то, что во внутреннем цикле foreach переменная итерации по-прежнему типизируется как Student , а запрос работает так же, как раньше. Измените переменную итерации student на var и выполните запрос заново. Результаты будут точно такими же.
Дополнительные сведения о переменной var см. в разделе Неявно типизированные локальные переменные.
Упорядочение групп по значению ключа
Выполняя предыдущий запрос, вы могли заметить, что группы отображаются не в алфавитном порядке. Для того чтобы это изменить, необходимо указать предложение orderby после предложения group . Но, чтобы использовать предложение orderby , нужен идентификатор, служащий в качестве ссылки на группы, создаваемые предложением group . Укажите идентификатор с помощью ключевого слова into , как показано ниже:
После выполнения этого запроса группы будут отсортированы в алфавитном порядке.
Введение идентификаторов с помощью предложения let
Ключевое слово let позволяет ввести идентификатор для любого результата в выражении запроса. Этот идентификатор может применяться для удобства, как в следующем примере, или повышать производительность, сохраняя результаты выражения, чтобы не вычислять их повторно.
Дополнительные сведения см. в разделе Предложение let.
Использование синтаксиса метода в выражении запроса
Как описано в разделе Синтаксис запросов и синтаксис методов в LINQ, некоторые операции запросов можно выразить, только используя синтаксис метода. Представленный ниже код вычисляет общий балл для каждого объекта Student в исходной последовательности, а затем применяет метод Average() к результатам запроса, чтобы рассчитать средний балл класса.
Преобразование или проецирование в предложение select
Запрос очень часто выдает последовательность, элементы которой отличаются от элементов в исходной последовательности. Удалите или закомментируйте предыдущий запрос и цикл выполнения и замените его на представленный ниже код. Обратите внимание на то, что запрос возвращает последовательность строк (не Students ), и этот факт отражается в цикле foreach .
Код, представленный выше в этом пошаговом руководстве, показывает, что среднее количество баллов по классу составляет около 334. Для создания последовательности Students , сумма баллов в которой будет выше, чем средний показатель по классу, с указанием Student ID можно вставить в оператор select анонимный тип:
Следующие шаги
в этом пошаговом руководстве показано, как можно использовать функции языка Visual Basic для написания выражений запросов Language-Integrated запросов (LINQ). В этом пошаговом руководстве показано, как создавать запросы к списку объектов Student, выполнять запросы и изменять их. Запросы включают в себя несколько функций, включая инициализаторы объектов, определение локального типа и анонимные типы.
После завершения этого пошагового руководства вы будете готовы перейти к образцам и документации для конкретного интересующего поставщика LINQ. поставщики LINQ включают LINQ to SQL, LINQ to DataSet и LINQ to XML.
Создание проекта
Создание проекта консольного приложения
Запустите Visual Studio.
В меню Файл выберите пункт Создать, а затем команду Проект.
В списке Установленные шаблоны щелкните Visual Basic.
В списке типов проектов щелкните консольное приложение. В поле имя введите имя проекта и нажмите кнопку ОК.
Создается проект. По умолчанию он содержит ссылку на System.Core.dll. кроме того, список импортированных пространств имен на странице ссылки Project конструкторе (Visual Basic) включает пространство имен.
на странице компиляция Project конструкторе (Visual Basic)убедитесь, что параметр infer имеет значение On.
Добавление источника данных In-Memory
Источником данных для запросов в этом пошаговом руководстве является список Student объектов. Каждый Student объект содержит имя, фамилию, класс year и академический рейтинг в тексте учащегося.
Добавление источника данных
Student Определите класс и создайте список экземпляров класса.
Код, необходимый для определения Student класса и создания списка, используемого в примерах пошагового руководства, приведен в разделе Student . Вы можете скопировать его из него и вставить в проект. Новый код заменяет код, который отображался при создании проекта.
Добавление нового учащегося в список учащихся
- Следуйте шаблону в getStudents методе, чтобы добавить в список другой экземпляр Student класса. При добавлении учащегося будут представлены инициализаторы объектов. Дополнительные сведения см. в разделе инициализаторы объектов: именованные и анонимные типы.
Создание запроса
При выполнении запроса, добавленного в этом разделе, создается список учащихся, чьи учебные заведения помещают в десять первых. Поскольку запрос выбирает полный Student объект каждый раз, тип результата запроса — IEnumerable(Of Student) . Однако тип запроса обычно не указывается в определениях запросов. Вместо этого компилятор использует определение локального типа для определения типа. Дополнительные сведения см. в разделе определение локального типа. Переменная currentStudent диапазона запроса, выступает в качестве ссылки на каждый Student экземпляр в источнике students , предоставляя доступ к свойствам каждого объекта в students .
Создание простого запроса
Найдите место в Main методе проекта, который помечен следующим образом:
Скопируйте приведенный ниже код и вставьте его в.
Наведите указатель studentQuery мыши на код, чтобы убедиться, что назначенный компилятором тип имеет IEnumerable(Of Student) значение.
Выполнение запроса
Переменная studentQuery содержит определение запроса, а не результаты выполнения запроса. Типичный механизм выполнения запроса — For Each цикл. Доступ к каждому элементу в возвращаемой последовательности осуществляется через переменную итерации цикла. Дополнительные сведения о выполнении запросов см. в разделе Написание первого запроса LINQ.
Выполнение запроса
Добавьте следующий For Each цикл под запросом в проекте.
Наведите указатель мыши на переменную studentRecord управления циклом, чтобы увидеть ее тип данных. Тип studentRecord выводится Student как, так как studentQuery возвращает коллекцию Student экземпляров.
Выполните сборку и запустите приложение, нажав клавиши CTRL + F5. Обратите внимание на результаты в окне консоли.
Изменение запроса
Проще проверять результаты запроса, если они находятся в указанном порядке. Возвращаемую последовательность можно отсортировать на основе любого доступного поля.
Упорядочение результатов
Добавьте следующее Order By предложение между Where оператором и Select инструкцией запроса. Order By Предложение упорядочивает результаты в алфавитном порядке от A до Z в соответствии с фамилией каждого учащегося.
Чтобы упорядочить по фамилии, а затем по имени, добавьте в запрос оба поля:
Можно также указать Descending Порядок от я до а.
Выполните сборку и запустите приложение, нажав клавиши CTRL + F5. Обратите внимание на результаты в окне консоли.
Введение локального идентификатора
Добавьте код в этом разделе, чтобы ввести локальный идентификатор в выражение запроса. Локальный идентификатор будет содержать промежуточный результат. В следующем примере name — это идентификатор, содержащий объединение имени и фамилии учащегося. Локальный идентификатор можно использовать для удобства или повысить производительность, сохранив результаты выражения, которые в противном случае будут вычисляться несколько раз.
Выполните сборку и запустите приложение, нажав клавиши CTRL + F5. Обратите внимание на результаты в окне консоли.
Проецирование одного поля в предложении SELECT
Добавьте запрос и For Each цикл из этого раздела, чтобы создать запрос, который создает последовательность, элементы которой отличаются от элементов в источнике. В следующем примере источником является коллекция Student объектов, но возвращается только один элемент каждого объекта: имена учащихся, чье фамилия — Гарсиа. Так как currentStudent.First является строкой, тип данных последовательности, возвращаемой studentQuery3 , — это IEnumerable(Of String) последовательность строк. Как и в предыдущих примерах, для определения типа данных для studentQuery3 компилятора необходимо определить, используя вывод локального типа.
Наведите указатель studentQuery3 мыши на код, чтобы убедиться, что назначенный тип имеет IEnumerable(Of String) значение.
Выполните сборку и запустите приложение, нажав клавиши CTRL + F5. Обратите внимание на результаты в окне консоли.
Создание анонимного типа в предложении SELECT
Добавьте код из этого раздела, чтобы увидеть, как анонимные типы используются в запросах. Они используются в запросах, если требуется вернуть несколько полей из источника данных, а не полные записи ( currentStudent записи в предыдущих примерах) или отдельные поля ( First в предыдущем разделе). Вместо определения нового именованного типа, содержащего поля, которые необходимо включить в результат, необходимо указать поля в Select предложении, и компилятор создаст анонимный тип с этими полями в качестве свойств. Дополнительные сведения см. в статье Анонимные типы.
В следующем примере создается запрос, который возвращает имя и звание старших званий, чьи учебные заведения находятся в диапазоне от 1 до 10 в порядке академических званий. В этом примере тип studentQuery4 должен быть определен, поскольку Select предложение возвращает экземпляр анонимного типа, а анонимный тип не имеет имени.
Выполните сборку и запустите приложение, нажав клавиши CTRL + F5. Обратите внимание на результаты в окне консоли.
Дополнительные примеры
Теперь, когда вы понимаете основы, ниже приведен список дополнительных примеров для демонстрации гибкости и возможностей запросов LINQ. Каждому примеру предшествует краткое описание того, что он делает. Наведите указатель мыши на переменную результата запроса для каждого запроса, чтобы увидеть выведенный тип. For Each Для получения результатов используйте цикл.
Дополнительные сведения
После ознакомления с основными понятиями работы с запросами вы можете ознакомиться с документацией и примерами для конкретного типа поставщика LINQ, который вас интересует:
это пошаговое руководство содержит фундаментальный комплексный сценарий LINQ to SQL с минимальными сложностями. В нем создается класс сущностей, который моделирует таблицу Customers в учебной базе данных Northwind. После этого создается простой запрос на получение списка клиентов, находящихся в Лондоне.
это пошаговое руководство ориентировано на разработку кода, чтобы помочь в отображении LINQ to SQL концепций. как правило, для создания объектной модели следует использовать реляционный конструктор объектов.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.
Предварительные требования
Для хранения файлов используется выделенная папка ("c:\linqtest5"). Прежде чем приступить к выполнению задач, создайте такую папку.
В данном пошаговом руководстве требуется доступ к учебной базе данных Northwind. Если база данных не установлена на компьютере разработчика, загрузите ее с веб-узла Центра загрузки Майкрософт. Инструкции см. в разделе Загрузка образцов баз данных. После загрузки базы данных скопируйте файл в папку c:\linqtest5.
Обзор
Данное пошаговое руководство состоит из шести основных задач.
создание LINQ to SQL решения в Visual Studio.
Сопоставление класса с таблицей базы данных.
Назначение свойств классу для представления столбцов базы данных.
Указание подключения к базе данных Northwind.
Создание простого запроса к базе данных.
Выполнение запроса и просмотр результатов.
Создание решения LINQ to SQL
в этой первой задаче вы создадите Visual Studio решение, содержащее необходимые ссылки для сборки и запуска проекта LINQ to SQL.
Создание решения LINQ to SQL
в меню файл Visual Studio выберите пункт создать, а затем пункт Project.
В области Шаблоны щелкните Консольное приложение.
В поле имя введите линкконсолеапп.
В поле Расположение проверьте, где вы хотите сохранить файлы проекта.
Нажмите OK.
Добавление ссылок и директив LINQ
В этом пошаговом руководстве используются сборки, которые могут быть не установлены по умолчанию в проект. Если System. Data. LINQ не указан в качестве ссылки в проекте (разверните узел ссылки в Обозреватель решений), добавьте его, как описано в следующих шагах.
Добавление сборки System.Data.Linq
В Обозреватель решенийщелкните правой кнопкой мыши элемент ссылкии выберите команду Добавить ссылку.
Сборка будет добавлена в проект.
Добавьте следующие директивы в начало файла Program. CS:
Сопоставление класса с таблицей базы данных
На этом этапе создается класс, который сопоставляется с таблицей базы данных. Такой класс называется классом сущностей. Обратите внимание, что сопоставление осуществляется простым добавлением атрибута TableAttribute. Свойство Name задает имя таблицы в базе данных.
Создание класса сущностей и его сопоставление с таблицей базы данных
Введите или вставьте следующий код в Program.cs непосредственно перед объявлением класса Program .
Назначение свойств классу для представления столбцов базы данных.
На этом этапе выполняется несколько задач.
Используется атрибут ColumnAttribute для назначения классу сущностей свойств CustomerID и City , представляющих столбцы в таблице базы данных.
Назначается свойство CustomerID , представляющее столбец первичного ключа в базе данных.
Назначаются поля _CustomerID и _City для закрытого хранения. LINQ to SQL может сохранять и извлекать значения напрямую, вместо использования общедоступных методов доступа, которые могут включать бизнес-логику.
Представление характеристик двух столбцов базы данных
Для класса Customer введите или вставьте следующий код в Program.cs в фигурных скобках.
Указание подключения к базе данных Northwind
На этом этапе для установки подключения между основанными на коде структурами данных и самой базой данных используется объект DataContext. Основным каналом, через который извлекаются объекты из базы данных и отправляются изменения, является класс DataContext.
Также объявляется объект Table , который действует как логическая типизированная таблица для запросов к таблице Customers в базе данных. Эти запросы создаются и выполняются в последующих действиях.
Указание подключения к базе данных
Введите или вставьте следующий код в метод Main .
Обратите внимание, что файл northwnd.mdf находится в папке "linqtest5". Дополнительные сведения см. в разделе "Предварительные требования" ранее в этом руководстве.
Создание простого запроса
кроме того, вы получите выходные данные журнала для отображения SQL команд, которые LINQ to SQL создавать. Возможность ведения журнала (которая использует метод Log) очень полезна при отладке, а также при проверке того, что команды, отправляемые в базу данных, точно соответствуют запросу.
Создание простого запроса
Введите или вставьте следующий код в метод Main после объявления Table .
Выполнение запроса
На этом шаге производится фактическое выполнение запроса. Выражения запроса, созданные на предыдущем этапе, не оцениваются до тех пор, пока не понадобятся результаты. После начала итерации foreach выполняется команда SQL для базы данных и материализуются объекты.
Порядок выполнения запроса
Введите или вставьте следующий код в конце метода Main (после описания запроса).
Нажмите клавишу F5, чтобы начать отладку приложения.
если приложение создает ошибку времени выполнения, см. раздел устранение неполадок в Обучение с помощью пошаговых руководств.
В окне консоли отображаются следующие результаты запроса.
Чтобы закрыть приложение, в окне консоли нажмите клавишу ВВОД.
Next Steps
Если требуется выполнить пошаговое руководство "Выполнение запросов в связях", необходимо сохранить решение, созданное в процессе только что завершенного пошагового руководства. Это условие является обязательным.
Разработать приложение, которое демонстрирует основные операции над данными в базе данных типа MS SQL Server , а именно:
- подключение базы данных к приложению;
- отображение таблиц базы данных на форме;
- добавление новой записи в базу данных;
- редактирование записи;
- удаление записи.
За основу взята база данных Education.dbo , процесс создания которой подробно описывается здесь.
На рисунке 1 отображена структура базы данных Education.dbo . Как видно из рисунка, база данных называется:
Здесь « sasha-pc » – идентификатор компьютера в сети, « sqlexpress » – название сервера баз данных, « Education.dbo » – название базы данных.
Рис. 1. База данных Education.dbo
База данных содержит две таблицы: Student и Session. Структура таблиц следующая.
Выполнение
1. Создать новый проект в MS Visual Studio как Windows Forms Application .
Создать новый проект типа Windows Forms Application . Пример создания нового проекта подробно описывается здесь.
2. Создание нового представления ( view ) для отображения данных таблицы Student .
Чтобы отображать данные таблиц базы данных, можно использовать разные способы. Один из них – это создание представлений ( views ), которые формируются средствами MS Visual Studio .
В нашем случае данные таблиц будут отображаться на форме в элементе управления типа DataGridView . После создания представлений, очень удобно их связать с элементами DataGridView .
Для создания представления, нужно вызвать команду « Add New View » из контекстного меню, которое вызывается кликом правой кнопкой мышки на элементе « Views » базы данных Education.dbo (рисунок 2).
Рис. 2. Вызов команды добавления нового представления
В результате откроется окно « Add Table » (рисунок 3). В окне нужно выбрать таблицы, которые добавляются к представлению.
Рис. 3. Выбор таблиц, на которых будет базироваться новое представление
В нашем случае выбираем таблицу Student и подтверждаем свой выбор кликом на кнопке Add . Следующим шагом нужно закрыть окно выбором кнопки Close .
После выполненных действий будет сформировано окно, в котором нужно выбрать поля, которые должны отображаться в представлении (на форме). Выбираем все поля (рисунок 4).
При выборе полей, в верхней части рабочей области отображаются поля таблицы Student . С помощью «мышки» можно выбирать нужные поля для представления.
Соответственно, в средней области окна отображаются названия выбранных полей, таблица в которой они есть (см. рис. 4), возможность сортировки, фильтрование и прочее.
В нижней части области отображается соответствующий текст SQL -запроса, который используется для создания представления.
Рис. 4. Выбор полей таблицы Student для их отображения в представлении
После выбора команды
откроется окно, в котором нужно указать имя представления. Задаем имя « View Student » (рисунок 5).
Рис. 5. Указание имени для представления
После выполненных действий, окно представления будет иметь вид как показано на рисунке 6.
Рис. 6. Представление View Student в базе данных
Теперь можно размещать элемент управления DataGridView и связывать его с представлением.
3. Размещение элемента управления DataGridView и настройка связи с базой данных.
Перед размещением элемента управления DataGridView нужно перейти в режим проектирования формы « Form1.cs [Design] «.
Элемент DataGridView представляет собой таблицу, которая может отображать данные. Данный элемент управления размещается в панели ToolBox . Сначала немного корректируем размеры формы, а потом размещаем на ней элемент управления DataGridView (рисунок 7). В результате будет создан экземпляр объекта с именем dataGridView1 по умолчанию.
Рис. 7. Элемент управления DataGridView и окно выбора источника данных
После размещения элемента управления типа DataGridView на форме в правом верхнем углу можно выбрать настройку источника данных. Соответственно откроется окно « DataGridView Tasks «. В этом окне нужно выбрать сплывающее меню « Choose Data Source «.
В открывшемся меню выбирается команда « Add Project Data Source… » (рис. 7). После этого открывается окно мастера, в котором последовательно выбирается источник данных.
На рисунке 8 показано окно « Data Source Configuration Wizard «, в котором выбирается тип источника данных. В нашем случае устанавливаем « Database «.
Рис. 8. Выбор типа источника данных
В следующем окне (Рисунок 9) выбирается модель источника данных. Нужно выбрать DataSet .
Рис. 9. Выбор модели источника данных
В окне, изображенном на рисунке 10 , нужно задать соединение данных, которое нужно использовать для подключения к базе данных. В нашем случае нужно выбрать базу данных « sasha-pc\sqlexpress\Education.dbo «.
Рис. 10. Выбор соединения данных
В следующем окне (рисунок 11) предлагается сохранить строку соединения Connection String в конфигурационный файл приложения. Оставляем все как есть и переходим к следующему окну.
Рис. 11. Предложение сохранения строки соединения с базой данных Connection String в конфигурационном файле приложения
После создания соединения с базой данных отображается множество объектов базы данных (рисунок 12). В нашем случае нужно выбрать представление « View Student » и все поля из него. Отмеченные поля будут отображаться в компоненте типа DataGridView .
Рис. 12. Выбор объектов базы данных, которые нужно отображать в DataGridView
После выбора кнопки Finish будут отображены выбранные объекты (представление View Student ) базы данных Education.dbo (рисунок 13).
Рис. 13. Элемент управления типа DataGridView с выбранными полями представления View Student
Подобным образом можно настроить представления, которые содержат любые поля из любых таблиц базы данных. Также в одном представлении могут отображаться поля из разных таблиц.
4. Настройка вида элемента управления типа DataGridView .
Если запустить приложение на выполнение, то будут получены данные представления View Student , которое отвечает таблице Student базы данных (рисунок 14).
Как видно из рисунка 14, данные в таблице dataGridView1 отображаются нормально, но оформление можно скорректировать.
Элемент управления типа DataGridView допускает корректирование вида полей, которые отображаются.
Для вызова команд редактирования полей, достаточно вызвать контекстное меню кликом правой кнопкой мышки на элементе управления dataGridView1 .
В меню существуют различные полезные команды, которые разрешают управлять видом и работой DataGridView :
- команда блокирования элемента управления ( Lock Controls );
- команда редактирования полей, которые отображаются в представлении ( Edit Columns… );
- команда добавления новых полей, например вычисляемых ( Add Column ).
В нашем случае нужно выбрать команду « Edit Columns… » (рисунок 15).
Рис. 15. Команда « Edit Columns… » из контекстного меню
В результате откроется окно « Edit Columns «, в котором можно настроить вид полей представления по собственному вкусу (рисунок 16).
Рис. 16. Окно настройки вида полей в представлении « View Student «
В окне на рисунке 16 для любого поля можно настроить название, выравнивание, ширину, возможность редактирования данных и т.п.
5. Строка Connection String
Для того, чтобы в базу данных вносить изменения, нужно получить строку соединения с базой данных Connection String .
Существуют разные способы получения строки соединения с базой данных. Один из них базируется на чтении этой строки в окне Properties базы данных Education.dbo (рис. 17).
Для сохранности строки в программе вводится внутренняя переменная типа string . С помощью буфера обмена копируем строку Connection String в описанную переменную типа string .
В тексте файла « Form1.cs » в начале описания класса Form1 надо описать переменную:
На данный момент текст класса Form1 следующий:
6. Создание новой формы для демонстрации команд манипулирования данными.
Добавление новой формы осуществляется командой:
В открывшемся окне « New Item » нужно выбрать элемент « Windows Form «.
Имя файла новой формы оставляем по умолчанию « Form2.cs «.
На рисунке 18 изображен вид новой формы.
Размещаем на форме элементы управления следующих типов:
Нужно настроить следующие свойства элементов управления:
- в элементе управления button1 свойство Text = « OK «;
- в элементе управления button2 свойство Text = « Cancel «;
- в элементе управления button1 свойство DialogResult = « OK «;
- в элементе управления button2 свойство DialogResult = « Cancel «;
- в элементе управления label1 свойство Text = « Num_book «;
- в элементе управления label2 свойство Text = « Name «;
- в элементе управления label3 свойство Text = « Group «;
- в элементе управления label4 свойство Text = « Year «.
Также настраиваем видимость элементов управления типа TextBox . Для этого во всех элементах управления textBox1 , textBox2 , textBox3 , textBox4 значение свойства Modifiers = « public «.
7. Добавление кнопок вызова команд манипулирования данными таблицы Student .
Для дальнейшей работы нужно с помощью мышки переключиться на главную форму Form1 .
На главную форму приложения Form1 добавляем три кнопки ( Button ). Автоматически будет создано три переменных-объекта с именами button1 , button2 , button3 . В каждой из этих кнопок вносим следующие настройки (окно Properties ):
- в кнопке button1 свойство Text = « Insert … » (вставить запись);
- в кнопке button2 свойство Text = « Edit … » (изменить запись);
- в кнопке button3 свойство Text = « Delete «.
В результате внесенных изменений главная форма будет иметь вид как показано на рисунке 19.
8. Программирование события клика на кнопке « Insert… «.
Обработчик события клика на кнопке « Insert… » имеет вид:
Сначала вызывается форма Form2 . После получения результата « OK » (нажатие соответствующей кнопки), в форме Form2 заполненные поля в элементах типа TextBox включаются в строку SQL -запроса. SQL -запрос добавления новой строки имеет вид:
где value1 отвечает номеру зачетной книжки; value2 – фамилия студента; value3 – группа, в которой учится студент; value4 – год вступления.
Строка соединения с базой данных Connection String описывается в переменной conn_string (см. п. 5). Объект класса SqlConnection осуществляет соединение приложения с источниками данных. Кроме того, класс Connection решает задачи аутентификации пользователей, работу с сетями, идентификацию баз данных, буферизацию соединений и обработку транзакций.
Команда на языке SQL , добавляющая запись к таблице, инкапсулирована в классе SqlCommand . Конструктор класса SqlCommand принимает два параметра: строку запроса на языке SQL (переменная cmd_text ) и объект класса SqlConnection .
Метод ExecuteNonQuery() реализован в интерфейсе IDBCommand . Метод реализует SQL -команды, которые не возвращают данные. К таким командам относятся команды INSERT , DELETE , UPDATE а также хранимые процедуры, которые не возвращают данных. Метод ExecuteNonQuery() возвращает количество задействованных ним записей.
9. Программирование события клика на кнопке « Edit… «.
Обработчик события клика на кнопке « Edit… » имеет вид:
В этом обработчике выполняется SQL -команда UPDATE , которая изменяет текущее значение активной записи.
Читайте также: