WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Следующие обучающие программы MySQL Connector/NET
иллюстрируют, как разработать программы MySQL, используя такие технологии,
как Visual Studio, C#, ASP.NET и .NET, .NET Core и Mono framework.
Начните с первой обучающей программы, которая проверит, что вы установили
правильные компоненты программного обеспечения, затем выберите другие
обучающие программы, чтобы попробовать в зависимости от функций, которые вы
намереваетесь использовать в ваших приложениях. Эта секция обеспечивает введение в программирование на MySQL
Connector/NET. Пример кода написан на C# и разработан, чтобы работать с
Microsoft .NET Framework и Mono. Эта обучающая программа разработана, чтобы начать работу с Connector/NET
как можно быстрее, это не вдается в подробности ни по какой конкретной теме.
Однако следующие разделы этого руководства описывают каждую из тем, введенных
в этой обучающей программе более подробно. В этой обучающей программе вы
поощряетесь править код, изменяя его как требуется для вашей установки. Эта обучающая программа предполагает, что у вас уже есть MySQL и
Connector/NET. Это также предполагает, что вы установили
образец базы данных Прежде, чем собрать пример кода, удостоверьтесь, что вы добавили
ссылки на свой проект как требуется. Требуемые ссылки:
are Чтобы приложение MySQL Connector/NET могло
соединиться с базой данных MySQL, это должно установить связь при помощи
объекта Конструктор Следующий код показывает, как создать объект связи. Когда вызван конструктор Иногда попытка вызвать В этой секции вы изучили, как создать связь с базой данных MySQL, открыть
и закрыть соответствующий объект связи. Когда связь была установлена с базой данных MySQL, следующий шаг проводит
желаемые операции по базе данных. Это может быть достигнуто с помощью
объекта Вы будете видеть, как создать объект
Когда объект Когда связь была создана и открыта, код создает объект
В следующем примере вы будете видеть, как использовать метод
Процедура выполнения вызова метода
Запрос построен, создан объект команды и метод
Наконец, вы будете видеть как метод
Этот пример использует простой запрос, чтобы включить строки в таблице
Ранее, используя Этот расцепленный способ работы с данными поддерживается
MySQL Connector/NET. Есть несколько частей, вовлеченных в
работу этого метода: Набор данных. Набор данных это
область, в которой данные загружаются, чтобы прочитать или изменить.
Объект Адаптер данных. Адаптер данных это интерфейс между набором
данных и самой базой данных. Адаптер данных ответственен за эффективное
управление связью с базой данных, открывая и закрывая их как требуется.
Адаптер данных создается, экземплируя объект класса
Строитель команды. Строитель команды это
объект поддержки. Строитель команды работает вместе с адаптером данных. Когда
Каждый из этих классов будет теперь обсужден более подробно. Объект Хотя это создает объект Когда создан Объект Чтобы сделать что-либо полезное с данными из вашей базы данных, необходимо
загрузить его в набор данных. Это одна из работ объекта
Метод Данными в наборе данных может теперь управлять приложение как требуется.
В какой-то момент изменения данных должны быть написаны в ответ базе данных.
Это достигается через метод Взаимодействия между классами В этом примере, данные из базы данных Следующие данные показывают запущенное приложение.
World Database Application обновило данные в трех колонках: Code, Name,
и HeadOfState. Рис. 6.1. World Database Application Эта часть обучающей программы показывает вам, как использовать параметры в
вашем приложении MySQL Connector/NET. Хотя возможно построить последовательности SQL-запросов
непосредственно из ввода данных пользователем, это нежелательно, поскольку
это не предотвращает ошибочную или злонамеренно вводимую информацию.
Более безопасно использовать параметры, поскольку они будут обработаны только
как полевые данные. Например, предположите, что следующий запрос был построен
из ввода данных пользователем: Если последовательность Тот же самый запрос с использованием параметра для
ввода данных пользователем: Параметру предшествуют символ, чтобы указать, что это нужно
рассматривать в качестве параметра. А также отмечая положение параметра в строке запроса, необходимо добавить
параметр к объекту Command. Это иллюстрировано следующим фрагментом кода: В этом примере последовательность "North America" поставляется как
значение параметра статически, но в более практическом примере это прибыло бы
из ввода данных пользователем. Дальнейший пример иллюстрирует полный процесс: В этой части обучающей программы вы видите, как использовать параметры,
чтобы сделать ваш код более безопасным. Эта секция иллюстрирует, как работать с хранимыми процедурами. Помещение
интенсивных действий базы данных в хранимые процедуры позволяет вам
определить API для своего приложения базы данных. Можно снова использовать
этот API много раз. Эта техника избегает дублировать код базы данных, экономя
время и усилия, когда вы делаете обновления из-за изменений схемы:
настройте исполнение запросов или добавьте новые операции по базе данных для
регистрации, безопасности и так далее. Прежде, чем работать с этой
обучающей программой, ознакомьтесь с
В целях этой обучающей программы вы создадите простую хранимую процедуру,
чтобы видеть, как это можно вызвать из MySQL Connector/NET. В MySQL Client
соединитесь с базой данных Проверьте, что хранимая процедура работает как ожидалось, печатая
следующее в mysql: Сохраненная процедура берет единственный параметр, который является
континентом, чтобы ограничить ваш поиск. Подтвердив, что хранимая процедура присутствует и правильна, вы видите, как
получить доступ к ней из Connector/NET. Запрос хранимой процедуры из вашего запроса Connector/NET
подобен методам, которые вы видели ранее в этой обучающей программе.
Объект В этом случае хранимая процедура требует, чтобы вы передали параметр.
Это может быть достигнуто, используя методы в предыдущей секции на
параметрах,
раздел 6.1.4, как показано в следующем фрагменте кода: Значение параметра В этом пункте все настраивается и можно вызвать обычные методы
использования, также изученные в более ранних секциях. В этом случае
применяется метод Следующий код показывает полный пример хранимой процедуры. В этой секции вы видели, как вызвать хранимую процедуру из Connector/NET.
В настоящий момент это завершает нашу вводную обучающую программу при
программировании для Connector/NET. Много веб-сайтов показывают средство для пользователя, чтобы создать
учетную запись пользователя. Они могут зарегистрироваться на веб-сайте и
наслаждаться персонализированным опытом. Это требует, чтобы разработчик
создал таблицы базы данных, чтобы хранить пользовательскую информацию, наряду
с кодом, чтобы собрать и обработать эти данные.
Это представляет проблему разработчику и есть возможность для проблем
безопасности. Однако, ASP.NET ввел систему членства.
Эта система разработана вокруг понятия членства, профиля и ролевых
поставщиков, которые вместе обеспечивают всю функциональность, чтобы
осуществить пользовательскую систему, которая ранее была
создана разработчиком с нуля. MySQL Connector/NET включает веб-поставщиков для членства (или простого
членства), роли, профиля, состояния сеанса, карты
сайта и веб-персонализации. Эта обучающая программа показывает вам, как настроить ваше веб-приложение
ASP.NET, чтобы использовать членство в Connector/NET
и ролевых поставщиков. Это предполагает, что вы установили MySQL Server
с Connector/NET и Microsoft Visual Studio.
Эта обучающая программа была проверена с Connector/NET 6.0.4 и Microsoft
Visual Studio 2008 Professional Edition. Рекомендуется, чтобы вы использовали
версию 6.0.4 или выше для этой обучающей программы. Создайте новую базу данных MySQL, используя программу
MySQL Client ( Создайте новый веб-сайт ASP.NET в Visual Studio. Если вы не уверены,
как сделать это, обратитесь к
разделу 6.7, который демонстрирует, как создать простой веб-сайт
ASP.NET. Добавьте ссылки на Определите местонахождение файла
Найдите файл Добавьте признак Ради краткости исключена некоторая информация. Строка подключения, Атрибут Теперь необходимо создать строку подключения, на которую ссылаются в
предыдущем шаге. Загрузите файл Определите местонахождение секции отмеченной
Определенная база данных является, созданной в первом шаге.
Вы, возможно, альтернативно использовали существующую базу данных. В этом пункте надо гарантировать, что никакие ошибки не присутствуют.
Это может быть сделано выбором F6. ASP.NET поддерживает понятие локально и удаленно авторизованных
пользователей. С локальной аутентификацией пользователь утвержден, используя
авторизацию Windows, когда он пытается получить доступ к веб-сайту. Это может
быть полезно в интранет-среде. С удаленной аутентификацией пользователь
запрошен для ввода данных для входа в систему, получая доступ к веб-сайту,
и эти данные сравнены с информацией членства, хранящейся в сервере базы
данных, таком как MySQL Server. Вы будете теперь видеть, как выбрать
эту форму идентификации. Запустите ASP.NET Website Administration Tool.
Это может быть сделано быстро, щелкнув по маленькому символу молотка и Земли
в Solution Explorer. Можно также запустить этот инструмент, выбрав
В ASP.NET Website Administration Tool перейдите на вкладку
Security и сделайте следующее: Нажмите ссылку
User Authentication Type. Выберите опцию From the internet.
Веб-сайт должен будет теперь обеспечить форму, чтобы позволить пользователю
ввести данные для входа в систему. Детали будут сравнены с информацией
членства в базе данных MySQL. Теперь необходимо определить роль и поставщика членства, чтобы
использовать. Щелкните по вкладке Provider
и сделайте следующее: Нажмите ссылку Select a different
provider for each feature (advanced). Для поставщика членства выберите
MySQLMembershipProvider,
для ролевого поставщика выберите
MySQLRoleProvider. В Visual Studio восстановите решение при нажатии
Проверьте, что необходимая схема была создана. Это может быть
достигнуто, используя Можно теперь создать пользователей и роли для веб-приложения. Самый
легкий способ сделать это с ASP.NET Website Administration Tool.
Однако много веб-приложений содержат свои собственные модули для создания
ролей и пользователей. Для простоты ASP.NET Website Administration Tool
будет использоваться в этой обучающей программе. В ASP.NET Website Administration Tool перейдите на вкладку
Security. Теперь, когда членство и ролевой
поставщик позволены, вы будете видеть связи для создания ролей и
пользователей. Нажмите Create or Manage Roles
. Можно теперь ввести имя новой роли и нажать
Нажмите кнопку Нажмите Create User.
Можно теперь заполнить информацию о пользователе, а
также ассигновать того пользователя одной или более ролям. Используя интерпретатор команд
mysql,
можно проверить, что база данных была правильно наполнена
ролевыми данными и членством. В этой обучающей программе вы видели, как настроить членство в
Connector/NET и ролевых поставщиков для использования в вашем
веб-приложении ASP.NET. Эта обучающая программа показывает вам, как использовать поставщика
профиля MySQL, чтобы хранить информацию профиля пользователя в базе данных
MySQL. Обучающая программа использует MySQL Connector/NET 6.9.9, MySQL Server
5.7.21 и Microsoft Visual Studio 2017 Professional Edition. Много современных веб-сайтов позволяют пользователю создавать личный
профиль. Это требует существенного количества кода, но ASP.NET значительно
уменьшает это включением функциональности в ее классах профиля.
Поставщик профиля обеспечивает абстракцию между этими классами и источником
данных. Поставщик профиля MySQL позволяет данным о профиле быть сохраненными
в базе данных MySQL. Это позволяет свойствам профиля быть написанными в
некое хранилище и восстановленными при необходимости. Поставщик профиля также
позволяет данным о профиле управляться эффективно, например они позволяют
удалить профили, к которым не получили доступ начиная с определенной даты. Следующие шаги показывают вам, как можно выбрать поставщика профиля MySQL:
Создайте новый веб-проект ASP.NET. Выберите инструмент MySQL Application Configuration tool. В MySQL Application Configuration перейдите на страницу Profiles (см.
Profiles Provider). Отметьте Use MySQL to manage my profiles
. Отметьте Autogenerate Schema. Нажмите Перейдите к последней странице инструмента и нажмите
В этом пункте вы теперь готовы начать использовать MySQL Profile Provider.
Со следующими шагами можно выполнить предварительный тест на установку. Откройте файл Добавьте простой профиль, такой как следующий пример. Установка Теперь, когда простой профиль был определен в
В Design View спроектируйте простую страницу с
добавленными средствами управления. Следующие данные показывают вкладку
Default.aspx, открытую с текстовым окном,
списком и кнопками управления. Рис. 6.2. Простое применение профиля Они позволят пользователю входить в некоторую информацию о профиле.
Пользователь может также использовать кнопки, чтобы сохранить их профиль,
очистить страницу и восстановить их данные о профиле. В Code View добавляют следующий фрагмент кода. Сохраните все файлы и постройте решение, чтобы проверить, что никакие
ошибки не были допущены. Запустите приложение. Введите свое имя, возраст и выберите цвет из списка.
Теперь сохраните эту информацию в своем профиле при нажатии
Отбор цвета из списка использует цвет по умолчанию,
Blue, который был определен в файле
Нажмите Нажмите Теперь выйдите из браузера, чтобы закончить приложение. Запустите приложение снова, которое также восстанавливает вашу
информацию профиля из базы данных MySQL. В этой обучающей программе вы видели как использовать поставщика профиля
MySQL с Connector/NET. MySQL Connector/NET предоставляет веб-поставщик персонализации, который
позволяет вам использовать сервер MySQL, чтобы
хранить данные о персонализации. Эта опция была добавлена в Connector/NET 6.9.0. Эта обучающая программа демонстрирует, как формировать веб-поставщика
персонализации, использующего Connector/NET. Веб-сайт ASP.NET или веб-приложение
с поставщиком членства. .NET Framework 3.0. MySQL 5.5. Чтобы сформировать поставщика, сделайте следующее: Добавьте ссылки на
Включите поставщика персонализации Connector/NET
в секцию Чтобы создать веб-средства управления, выполните эти шаги: Создайте веб-приложение, используя Connector/NET ASP.NET
Membership. Для получения информации о выполнении этого посмотрите
раздел 6.2. Создайте новую страницу ASP.NET и затем измените
на Design view. Из Toolbox перетащите
WebPartManager на страницу. Определите HTML-таблицу с тремя колонками и одной строкой. Из WebParts Toolbox перетащите
Из WebParts Toolbox перетащите
Добавьте средства управления к
За пределами HTML-таблицы добавьте выпадающий список, две кнопки и
этикетку следующим образом: Следующий код заполняет список для режимов отображения, показывает
текущий объем, перезагружает состояние персонализации, переключает
тип объема (между пользователем и общим объемом) и
изменяет режим отображения. Используйте следующие шаги, чтобы проверить ваши изменения: Запустите приложение и откройте веб-страницу.
Страница должна быть похожей на пример, показанный на следующем
рисунке, на котором кнопка Toggle Scope установлена в
Рис. 6.3. Веб-страница Первоначально, когда учетная запись пользователя не авторизована, объем
scope is Shared по умолчанию.
Учетная запись пользователя должна быть авторизована, чтобы изменить
настройки на средствах управления. Следующие данные показывают пример, в
котором пользователь в состоянии настроить средства управления при помощи
выпадающего списка Browse. Варианты в списке:
Рис. 6.4. Средства управления Нажмите Теперь можно персонализировать зоны, используя режимы отображения
Рис. 6.5. Personalize Zones Эта секция документирует способность использовать простого поставщика
членства на шаблоне MVC 4. Конфигурация OAuth совместима с приложением для
входа, используя внешнюю авторизацию от таких сторонних поставщиков, как
Google, Facebook, Твиттер или других. Эта обучающая программа создает приложение, используя простого поставщика
членства и затем добавляет поддержку аутентификации через третье
лицо (Google) OAuth. яЭта опция была добавлена в MySQL Connector/NET 6.9.0. Connector/NET 6.9.x или выше. .NET Framework 4.0 или выше. Visual Studio 2012 или выше. MVC 4. Чтобы начать новый проект, сделайте следующее: Откройте Visual Studio, создайте новый проект типа
веб-приложения ASP.NET MVC 4 Web Application
и сформируйте проект, чтобы использовать .NET Framework 4.5. Рис. 6.6. Simple Membership: новый проект Выберите шаблон и движок просмотра. Эта обучающая программа
использует Internet Application Template с
движком Razor. Произвольно, можно добавить единицу тестового проекта выбором
Create a unit test project. Рис. 6.7. Simple Membership: выбор шаблона и движка Добавьте ссылки на сборки Добавьте действительную последовательность подключения MySQL в файл
Под узлом Обновите конфигурацию с действительными значениями
для следующих свойств: Обновите ваш класс Откройте файл Если база данных в строке подключения не существует,
то создайте ее. После запуска веб-приложением произведенная домашняя страница
показана на рисунке. Рис. 6.8. Simple Membership: произведенная домашняя страница Если приложение выполнилось нормально, то произведенная схема будет
подобна следующему рисунку, показывающему обозреватель объектов,
открытый для таблиц. Рис. 6.9. Simple Membership: произведенная схема и таблицы Чтобы создать пользовательский логин, нажмите
Данные для недавно созданного пользователя могут быть расположены в
таблицах OAuth это другой вариант аутентификации для веб-сайтов, которые используют
простого поставщика членства. Пользователь может быть проверен, используя
внешнюю учетку, например, для Facebook, Twitter, Google и другие. Используйте следующие шаги, чтобы позволить идентификацию, используя
учетку Google в приложении: Найдите файл Поскольку эта обучающая программа использует Google, найдите метод
Запустите приложение. Когда оно работает, нажмите
Use another service to log in. Рис. 6.10. Simple Membership с OAuth: Google Service Это действие перенаправляет к странице входа в систему Google (на
google.com) и запросит сведения о вашей учетной записи Google. После предоставления правильных данных сообщение просит разрешение для
вашего запроса получить доступ к информации пользователя. Прочитайте описание
и затем нажмите Приложение теперь может зарегистрировать учетку. Поле
User name будет заполнено соответствующей
информацией (в этом случае адрес электронной почты, который связан с
учеткой Google). Нажмите , чтобы
зарегистрировать пользователя в вашем приложении. Теперь новый пользователь зарегистрирован от внешнего источника, используя
OAuth. Информация о новом пользователе хранится в таблицах
Чтобы использовать другой внешний выбор для аутентификации пользователя,
необходимо включить клиент в том же самом классе, где мы включили Google в
этой обучающей программе. Как правило, поставщики требуют, чтобы вы
зарегистрировали свое приложение прежде, чем позволить идентификацию OAuth, и
после регистрации они, как правило, обеспечивают символ/ключ и ID, который
должен использоваться, регистрируя поставщика в приложении. Эта обучающая программа описывает, как создать источник данных Windows
Forms из Entity в Entity Data Model через Microsoft Visual Studio. Чтобы выполнить шаги в этой обучающей программе, сначала установите
образец базы данных Первый шаг должен создать новое приложение Windows Forms. В Visual Studio выберите
Выберите установленный шаблон Windows Forms
Application, нажмите .
Решение создается. Чтобы приобрести последнюю сборку Entity Framework для MySQL,
загрузите пакет NuGet. Альтернативно, используйте инструмент MySQL
Application Configuration в MySQL for Visual Studio 1.2.9 (или выше),
чтобы приобрести последний пакет и скоординировать конфигурацию.
Для получения дополнительной информации об использовании инструмента,
посмотрите Entity Framework. Чтобы добавить Entity Data Model к вашему решению, сделайте следующее: В Solution Explorer
щелкните правой кнопкой мыши по своему приложению и выберите
Visual Studio installed templates выберите
ADO.NET Entity Data Model. Нажмите
. Рис. 6.11. Добавляем Entity Data Model Вы будете теперь видеть мастера Entity Data Model.
Вы будете использовать мастера, чтобы произвести Entity Data Model
из образца базы данных. Можно теперь выбрать соединение
Да, включать уязвимые данные в строку подключения. Сохраните настройки подключения entity в
Если вы еще не сделали так, можно создать новую связь в это время при
нажатии Making a Connection. Рис. 6.12. Мастер Entity Data Model: соединение Обратите внимание на настройки подключения, которые будут использоваться в
Мастер Entity Data Model Wizard соединяется с базой данных. Как следующие данные показывают, вы получаете древовидную структуру базы
данных. Отсюда можно выбрать объект, который требуется включить в модель.
Если вы также создали обзоры и сохраненные подпрограммы, эти пункты будут
показаны наряду с любыми таблицами. В этом примере просто необходимо выбрать
таблицы. Нажмите Рис. 6.13. Мастер Entity Data Model: объекты и настройки Visual Studio производит модель с тремя таблицами (city, country и
countrylanguage), затем их показывает. Рис. 6.14. Диаграмма Entity Data Model Из главного меню Visual Studio выберите
Теперь вы будете добавлять новый источник данных к своему проекту и
видеть, как он может использоваться, чтобы читать и писать базу данных. Из главного меню Visual Studio выберите
Выберите Object и нажмите
. Выберите объект. Раскройте дерево, как показано ниже. В этой обучающей программе вы выберете таблицу city. После того, как
таблица была отобрана, нажмите Рис. 6.15. Мастер Data Source Configuration Мастер подтвердит, что объект добавлен. Нажмите
Объект city теперь появится в группе источников данных. Если группа
источников данных не показана, выберите
Этот шаг описывает, как использовать источник данных в Windows Form. В панели Data Sources
выбираете источник данных, который вы создали и просто перетаскиваете его в
Form Designer. По умолчанию объект источника данных будет добавлен как
Data Grid View. Data Grid View связан с
Рис. 6.16. Data Form Designer Сохраните и восстановите решение перед продолжением. Вы теперь готовы добавить код, чтобы гарантировать, что Data Grid View
будет наполнен данными из таблицы city базы данных. Дважды щелкните по форме, чтобы получить
доступ к ее коду. Добавьте следующий код, чтобы создать экземпляр объекта
Entity Data Model Сохраните и восстановите решение. Запустите решение. Подтвердите, что сетка наполнена (см. следующий
рисунок для примера), и что можно работать с базой данных. Рис. 6.17. Наполненный Grid Control Обязательный исходный компонент Binding гарантирует, что изменения,
сделанные в Data Grid View, также внесены в классы Entity, связанные с ним.
Однако, те данные должны быть сохранены назад из entities в базу данных.
Это может быть достигнуто предоставлением возможности кнопки Save в
навигаторе и добавлением некоторого кода. В Form Designer щелкните по символу сохранения
на панели инструментов формы и подтвердите, что ее свойство
Enabled= Дважды щелкните по символу сохранения
на панели инструментов формы, чтобы показать код. Добавьте следующий (или подобный) код, чтобы гарантировать, что данные
сохраняются в базе данных, когда пользователь нажимает кнопку в приложении. Когда код был добавлен, сохраните решение и затем соберите его.
Запустите приложение и проверьте, что изменения,
внесенные в сетке, сохранены. В этой обучающей программе вы создаете веб-страницу ASP.NET, которая
связывает запросы LINQ с Entity Framework, используя отображение с
MySQL Connector/NET. Если вы еще не сделали этого, установите образец базы данных
В этой части обучающей программы вы создаете веб-сайт ASP.NET.
Веб-сайт использует базу данных В главном меню Visual Studio выберите
Из установленных шаблонов Visual Studio выберите
ASP.NET Web Site. Нажмите
. Вы получите представление Source
вашей веб-страницы по умолчанию. Щелкните по вкладке Design, расположенной
под группой представления Source. В панели Design введите некоторый текст, чтобы украсить
чистую веб-страницу. Нажмите Toolbox.
Из списка средств управления выберите
DropDownList. Перетащите его ниже
текста на вашей веб-странице. Из контекстного меню DropDownList
гарантируйте, что флажок Enable AutoPostBack
включен. Это гарантирует, что обработчик событий контроля вызывают, когда
пункт выбран. Выбор пользователя будет в свою очередь использоваться, чтобы
наполнить GridView. Из Toolbox выберите GridView.
Перетащите GridView
чуть ниже выпадающего списка, который вы уже поместили. Следующие данные показывают пример декоративного текста и двух средств
управления на вкладке Design. Добавленный GridView произвел сетку с тремя
колонками ( Рис. 6.18. Установленный GridView Рекомендуется, чтобы вы сохранили и построили решение, чтобы
гарантировать, что нет никаких ошибок. Если вы будете управлять решением, то будете видеть, что текст и
выпадающий список показаны, но список пуст. Кроме того, представление сетки
не появляется вообще. Добавление этой функциональности
описано в следующих разделах. На данном этапе у вас есть веб-сайт, который построен,
но дальнейшая функциональность пока еще требуется. Следующий шаг должен будет
использовать Entity Framework, чтобы создать отображение из базы данных
На этой стадии обучающей программы вы добавите ADO.NET Entity Data Model
к своему проекту, используя базу данных В этой части обучающей программы вы напишете код, чтобы наполнить
DropDownList. Загрузка веб-страницей данных,
чтобы наполнить список, будет достигнуто при помощи результатов запроса
LINQ на модели, созданной ранее. В группе Design дважды щелкните по любой чистой области.
Это откроет метод Измените соответствующий раздел кода согласно
следующему примеру листинга. Список должен быть наполнен только когда страница загружается.
Условный код гарантирует, что, если страница впоследствии перезагружается,
список не наполнен повторно, что потеряло бы пользовательский выбор. Сохраните решение, постройте его и запустите.
Необходимо видеть, что список был наполнен. Можно выбрать пункт, но пока еще
GridView не появляется. В этом пункте вы имеете рабочий Drop Down List,
наполненный запросом LINQ на вашей модели данных. В последней части этой обучающей программы вы наполните Grid View,
используя запрос LINQ на вашей модели данных. В представлении Design дважды щелкните по
DropDownList. Это действие вызывает код
Измените соответствующий раздел кода соответственно
следующему примеру листинга. Контроль за представлением сетки наполнен от результата запроса LINQ
на модели данных. Сохраните, соберите и запустите приложение.
Когда вы выбираете страну, вы будете видеть, что ее города показаны в
GridView. Следующие данные показывают Бельгию, выбранную из поля списка и
таблицу с тремя колонками: Рис. 6.19. Рабочий веб-сайт В этой обучающей программе вы видели, как создать веб-сайт ASP.NET, вы
также видели, как можно получить доступ к базе данных MySQL, используя
запросы LINQ на модели данных. Эта обучающая программа демонстрирует, как создать MySQL
DDL из модели Entity Framework.
Минимально вам будет нужен Microsoft Visual Studio 2017 и
MySQL Connector/NET 6.10. Создайте новое консольное
приложение в Visual Studio 2017. Используя Solution Explorer,
добавьте ссылку на Из Solution Explorer выберите
, .
В диалоге Add New Item выберите
Online Templates.
Выберите ADO.NET Entity Data Model и нажмите
, чтобы открыть диалог
Entity Data Model. В диалоге Entity Data Model выберите
Empty Model. Нажмите
, чтобы создать пустую модель. Создайте простую модель. Единственный Entity сделан в
целях этой обучающей программы. На панели Properties выберите
из списка. На панели Properties выберите
DDL Generation Template в категории
Database Script Generation. Для свойства DDL Generation выберите
из списка. Сохраните решение. Щелкните правой кнопкой мыши по пустому месту в области
проектирования, чтобы открыть контекстне меню. Из меню выберите
Generate Database Wizard. В диалоге Generate Database Wizard
выбирают существующую связь или создают новую связь с сервером.
Выберите подходящий вариант, чтобы показать или скрыть уязвимые данные.
В целях этой обучающей программы можно выбрать
Yes, хотя вы могли бы пропустить это
для коммерческого применения. Нажмите Вы видели, как создать код MySQL DDL из модели Entity Framework. Эта обучающая программа обеспечивает инструкции о том, как начать
использовать MySQL в качестве хранилища документов с MySQL Connector/NET.
Для понятий и дополнительных примеров использования см.
X DevAPI User Guide. MySQL Server 8.0.11 с X Protocol. Connector/NET 8.0.11. Visual Studio 2013/2015/2017. Образец базы данных Скрипту MySQL предоставляют данные и коллекцию JSON.
Образец содержит следующее: Коллекция. countryinfo: информация о странах в мире. Таблицы. country: минимальная информация о странах мира. city: информация о некоторых городах в тех странах. countrylanguage: на каких языках говорят в каждой стране.
Чтобы установить образец базы данных Скачайте Извлеките инсталляционный архив в какое-то место, например,
в Распаковывание архива приводит к двум файлам, один из них
Соединитесь с сервером MySQL, используя MySQL Client: Введите свой пароль. Не-root может использоваться, пока есть привилегии
создать новые базы данных. Для получения дополнительной информации об
использовании MySQL Client см.
mysql
The MySQL Command-Line Client. Выполните скрипт Замените Создайте новый консольный проект в Visual Studio, предназначающийся для
.NET Framework 4.5.2 (или выше), .NET Core 1.1 или .NET Core 2.0.
Примеры кода в этой обучающей программе показываются на языке C#, но можно
использовать любой .NET-язык. Добавьте ссылку в своем проекте к следующим DLL: Импортируйте необходимые пространства имен, добавив следующие запросы: Сессия в X DevAPI это понятие сессии базы данных высокого уровня,
которое отличается от работы с традиционными подключениями mysql низкого
уровня. Важно понять, что эта сессия не то же самое, что традиционная сессия
MySQL. Сессии заключают в капсулу одно или несколько
фактических подключений mysql. Следующий пример открывает сессию, которую можно использовать позже,
чтобы восстановить схему и выполнить основные операции CRUD. После того, как сессия создана, можно выполнить операцию поиска.
Следующий пример использует объект сессии, который вы создали: Следующий пример показывает основные операции с коллекцией. В этой обучающей программе вы изучите, как можно использовать MySQL
Connector/NET, чтобы соединиться с сервером MySQL, чтобы использовать SSL.
Поддержка клиентом SSL-сертификата PFX была добавлена в Connector/NET 6.2.
PFX это собственный формат сертификатов в Microsoft Windows. Позже поддержка
клиентом SSL-сертификата PEM была добавлена в Connector/NET 8.0.16. MySQL Server использует формат PEM для сертификатов и закрытых ключей.
Connector/NET позволяет использование сертификатов PEM или PFX с классическим
протоколом MySQL и с X-протоколом. Эта обучающая программа использует
тестовый сертификат от набора тестов сервера, как пример. Можно получить
исходный код MySQL Server с
MySQL Downloads. Сертификаты могут быть найдены в
каталоге Чтобы применять конфигурацию запуска серверной
стороны для связей SSL: В конфигурационном файле MySQL Server
установите параметры SSL как показано в следующем примере.
Приспособьте пути к каталогам согласно местоположению, в котором вы
установили исходный код MySQL. Опция Для описания вариантов строки подключения, используемых в этой
обучающей программе, посмотрите
раздел 4.5
. Создайте тестовую учетную запись, чтобы использовать в этой обучающей
программе и установите требование SSL. Используя клиент командной строки
MySQL, соединитесь как Для получения дальнейшей информации о стратегиях учетных записей см.
Access Control and Account Management. Теперь, когда конфигурация серверной стороны закончена, можно начать
клиентскую конфигурацию, используя сертификат формата PEM или
PFX в Connector/NET. Прямое использование сертификатов формата PEM было введено, чтобы
упростить управление сертификатами в многоплатформенной окружающей среде,
которая включает подобные продукты MySQL. В предыдущих версиях Connector/NET
ваш единственный выбор состоял в том, чтобы использовать зависимые от
платформы сертификата форматы PFX. Для этого примера используйте испытательные сертификаты клиента из
хранилища сервера MySQL
( Установите опцию Добавьте соответствующие сертификаты SSL. Поскольку эта обучающая
программа устанавливает опцию Альтернативно, если вы устанавливаете режим SSL в
Откройте связь. Следующий пример открывает связь, используя
классический протокол MySQL, но можно выполнить подобный
тест, используя X-протокол. Ошибки при обработке сертификатов PEM приводят к исключению.
Для получения дополнительной информации посмотрите
Command Options for Encrypted Connections. .NET не оказывает поддержку формата PEM. Вместо этого Windows
включает хранилище сертификата, которое предоставляет зависимые от платформы
сертификата в формате PFX. В целях этого примера используйте испытательные
сертификата клиента из хранилища сервера MySQL
( Чтобы закончить шаги в этой обучающей программе для сертификатов PFX, у
вас должен быть установлен Open SSL. Это может быть загружено для Microsoft
Windows бесплатно с Shining Light Productions. Из каталога
Когда спросят относительно экспортного пароля, введите пароль
pass. Файл Используйте файл Путь к файлу сертификата должен быть изменен, чтобы отразить вашу
установку. Когда используется PFX-сертификат, опция
Первый шаг должен импортировать файл PFX
Выполните шаги, продиктованные мастером, и на запрос пароля для файла
PFX введите pass. Нажмите Запустите Microsoft Management Console, вводом в
командную строку Выберите Certificates. В диалоге нажмите My user account.
Этот выбор используется для личных сертификатов. Нажмите Нажмите У вас теперь есть Certificates Current
User в левой панели Microsoft Management Console.
Разверните пункт дерева Certificates - Current User и выберите
Personal,
Certificates.
Правая панель показывает сертификат в MySQL, который был ранее импортирован.
Дважды щелкните по сертификату, чтобы показать его детали. После того, как вы импортировали сертификат в Personal Store,
можно использовать более сжатую строку подключения, чтобы соединиться с базой
данных, как иллюстрировано следующим кодом: Если у вас есть большое количество сертификатов в хранилище, и у многих
из них есть тот же самый Issuer, это может быть источником проблем
и привести к неправильно используемому сертификату. Чтобы облегчить эту
ситуацию, есть дополнительный параметр отпечатка сертификата, который может
дополнительно быть определен как часть строки подключения.
Как упомянуто прежде, можно дважды щелкнуть по сертификату в Microsoft
Management Console, чтобы показать детали сертификата.
Когда диалог сертификата показан, щелкают по вкладке
Details и прокручивают вниз, чтобы видеть
отпечаток. Он, как правило, будет таким числом, как
Пробелы в параметре отпечатка опциональны,
значение нечувствительно к регистру. Эта обучающая программа учит вас, как использовать класс
Более подробная информация о классе
Чтобы управлять примерами программы в этой обучающей программе, настройте
простую испытательную базу данных и таблицу, используя клиент
mysql или MySQL Workbench.
Команды для mysql: Основной метод класса Объект Класс MySqlScript имеет несколько событий, связанных с ним: Error, если ошибка происходит. ScriptCompleted, когда скрипт успешно заканчивает выполнение. StatementExecuted после того, как каждый запрос выполняется.
Возможно назначить обработчики событий на каждое из этих событий.
Этот обеспеченный пользователями код вызван, когда связанное событие имеет
место. Следующий код показывает, как обработчики событий настраиваются. В VisualStudio можно сэкономить ввод при помощи автозавершения, чтобы
заполнить программные заглушки. Начните, например,
script.Error +=. Нажмите
TAB и еще раз
TAB.
Назначение закончено, и созданный обработчик событий готов.
Полный рабочий пример показан ниже: В обработчике события В зависимости от природы скрипта вам, возможно, понадобится контроль
разделителя, чтобы отделить запросы, которые составят скрипт.
Наиболее распространенный пример этого: у вас есть сохраненный мультизапрос
как часть вашего скрипта. В этом случае, если используется разделитель по
умолчанию ;, вы получите ошибку, когда вы
попытаетесь выполнить скрипт. Например: Этот код на самом деле должен быть выполнен на MySQL Server
как отдельный оператор. Однако с разделителем по умолчанию
; класс Выполняя это, запрос произвел бы ошибку. Чтобы решить эту проблему
Можно изменить разделитель назад в любом месте, установив значение
Delimiter. Следующий код показывает
полный рабочий пример:
Глава 6. Connector/NET: обучающие программы
6.1. Введение в Connector/NET
world
,
который может быть загружен с
MySQL Documentation page. Можно также найти детали о том, как установить
базу данных на той же самой странице.System
,
System.Data
и
MySql.Data
.
6.1.1. Объект MySqlConnection
MySqlConnection
.MySqlConnection
берет строку подключения в качестве одного из параметров. Строка подключения
предоставляет необходимую информацию, чтобы установить связь с базой данных
MySQL. Строка подключения обсуждена более полно в
разделе 4.5.
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Tutorial1
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
// Perform database operations
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
Console.WriteLine("Done.");
}
}
MySqlConnection
, он
возвращает объект связи, который используется для последующих операций по
базе данных. Откройте связь, прежде чем любые другие операции произойдут.
Перед завершением приложения закройте связь с базой данных, вызвав
на объекте связи Close
.Open
на объекте связи
может потерпеть неудачу, произведя исключение, которое может быть обработано,
используя стандартный код обработки исключений.
6.1.2. Объект MySqlCommand
MySqlCommand
.MySqlCommand
.
После того, как это было создано, есть три основных метода,
которые можно вызвать:ExecuteReader
, чтобы запросить
базу данных. Результаты обычно возвращаются в объекте
MySqlDataReader
, созданном
ExecuteReader
.ExecuteNonQuery
, чтобы
вставить, обновить и удалить данные.ExecuteScalar
, чтобы
возвратить единственное значение.MySqlCommand
был создан, вы вызовете один из предыдущих методов на нем, чтобы провести
операцию по базе данных Результаты обычно возвращаются в объекте
MySqlDataReader
, а затем обрабатываются,
например, результат мог бы быть показан.
Следующий код демонстрирует, как это могло быть сделано.
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Tutorial2
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent='Oceania'";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine(rdr[0]+" -- "+rdr[1]);
}
rdr.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
Console.WriteLine("Done.");
}
}
MySqlCommand
.
Тогда SQL-запрос, который будет выполнен, передается конструктору
MySqlCommand
. Метод
ExecuteReader
используется, чтобы произвести
объект MySqlReader
. Объект
MySqlReader
содержит результаты, произведенные
SQL, выполненным на объекте. Как только результаты были получены в объекте
MySqlReader
, результаты могут быть обработаны.
В этом случае информация распечатывается циклом
while
. Наконец от объекта
MySqlReader
избавляются, вызывая метод
Close
.ExecuteNonQuery
.ExecuteNonQuery
проще, поскольку нет никакой
потребности создать объект, чтобы сохранить результаты. Это потому, что
ExecuteNonQuery
используется только для вставки,
обновления и удаления данных. Следующий пример иллюстрирует простое
обновление таблицы Country
:
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Tutorial3
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "INSERT INTO Country (Name, HeadOfState, Continent) VALUES ('Disneyland','Mickey Mouse', 'North America')";
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
Console.WriteLine("Done.");
}
}
ExecuteNonQuery
обратился к объекту команды. Можно получить доступ к базе данных MySQL
интерпретатором команд mysql
и проверить, что обновление было выполнено правильно.ExecuteScalar
может использоваться, чтобы
возвратить единственное значение. Снова объект
MySqlDataReader
не требуется, чтобы хранить
результаты, простая переменная это сделает. Следующий код иллюстрирует, как
использовать ExecuteScalar
:
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Tutorial4
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "SELECT COUNT(*) FROM Country";
MySqlCommand cmd = new MySqlCommand(sql, conn);
object result = cmd.ExecuteScalar();
if (result != null)
{
int r = Convert.ToInt32(result);
Console.WriteLine("Number of countries in the world database is: " + r);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
Console.WriteLine("Done.");
}
}
Country
. Результат получен, вызывая
ExecuteScalar
на объекте команды.
6.1.3. Работа с расцепленными данными
MySqlDataReader
,
связь с базой данных все время сохранялась, если явно не закрыта.
Также возможно работать способом, где связь устанавливается только при
необходимости. Например, в этом способе, связь могла быть установлена, чтобы
прочитать кусок данных, данные тогда могли быть изменены приложением как
требуется. Связь тогда могла быть восстановлена, только если и когда
приложение написало данные в ответ базе данных.
Это отцепляет рабочий набор данных от базы данных.DataSet
экземплируется, который может
сохранить многократные таблицы данных.MySqlDataAdapter
. Объект
MySqlDataAdapter
имеет два основных метода:
Fill
, который читает данные в набор данных и
Update
, который пишет данные из
набора данных в базу данных.MySqlDataAdapter
создается, ему, как правило,
дают начальный оператор SELECT. От этого
SELECT
строитель команды может разработать
передачу запросов INSERT
,
UPDATE
и
DELETE
, которые потребовались бы, чтобы
обновлять базу данных. Чтобы создать строителя команды, надо создать объект
класса MySqlCommandBuilder
.Слздание объекта DataSet
DataSet
может быть создан просто, как показано в следующем фрагменте кода:
DataSet dsCountry;
...
dsCountry = new DataSet();
DataSet
,
это еще не наполнило его данными. Для этого требуется адаптер данных.Создание объекта MySqlDataAdapter
MySqlDataAdapter
может быть создан, как
иллюстрировано следующим примером:
MySqlDataAdapter daCountry;
...
string sql = "SELECT Code, Name, HeadOfState FROM Country
WHERE Continent='North America'";
daCountry = new MySqlDataAdapter (sql, conn);
MySqlDataAdapter
дан SQL-определением данных.
Создание объекта MySqlCommandBuilder
MySqlDataAdapter
,
необходимо произвести дополнительные запросы, требуемые для вставки,
обновления и удаления данных. Есть несколько способов сделать это, но в этой
обучающей программе вы будете видеть, как это может быть сделано наиболее
легко с MySqlCommandBuilder
.
Следующий фрагмент кода иллюстрирует, как это сделано:
MySqlCommandBuilder cb = new MySqlCommandBuilder(daCountry);
MySqlDataAdapter
передается в качестве параметра строителю команды.Заполнение набора данных
MySqlDataAdapter
, выполняется методом
Fill
. Следующий пример кода
иллюстрирует этот тезис.
DataSet dsCountry;
...
dsCountry = new DataSet();
...
daCountry.Fill(dsCountry, "Country");
Fill
это метод
MySqlDataAdapter
и Data Adapter
знает, как установить связь с базой данных, получить необходимые данные и
затем наполнить набор данных, когда вызван метод
Fill
. Второй параметр
Country является таблицей в наборе
данных, чтобы обновить.Обновление Data Set
Update
в
MySqlDataAdapter
.
daCountry.Update(dsCountry, "Country");
Рабочий пример
DataSet
,
MySqlDataAdapter
и
MySqlCommandBuilder
могут быть немного запутывающими, таким образом, их действие, возможно,
может быть лучше всего иллюстрировано, работая с кодом.world
прочитаны в Data Grid View. Здесь, данные могут быть рассмотрены и изменены
прежде, чем нажать кнопку обновления. Кнопка обновления тогда активирует код,
чтобы написать изменения в ответ базе данных. Код использует принципы,
объясненные ранее. Приложение было создано, используя Microsoft Visual
Studio, чтобы разместить и создать средства управления пользовательским
интерфейсом, но главный код, который использует ключевые классы, описанные
ранее, показывают в следующем примере кода.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data;
using MySql.Data.MySqlClient;
namespace WindowsFormsApplication5
{
public partial class Form1 : Form
{
MySqlDataAdapter daCountry;
DataSet dsCountry;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
label2.Text = "Connecting to MySQL...";
string sql = "SELECT Code, Name, HeadOfState FROM Country
WHERE Continent='North America'";
daCountry = new MySqlDataAdapter (sql, conn);
MySqlCommandBuilder cb = new MySqlCommandBuilder(daCountry);
dsCountry = new DataSet();
daCountry.Fill(dsCountry, "Country");
dataGridView1.DataSource = dsCountry;
dataGridView1.DataMember = "Country";
}
catch (Exception ex)
{
label2.Text = ex.ToString();
}
}
private void button1_Click(object sender, EventArgs e)
{
daCountry.Update(dsCountry, "Country");
label2.Text = "MySQL Database Updated!";
}
}
}
6.1.4. Работа с параметрами
string sql = "SELECT Name, HeadOfState FROM Country
WHERE Continent = "+user_continent;
user_continent
прибыла из Text Box, потенциально не будет никакого контроля над
последовательностью, введенной пользователем.
Пользователь мог ввести последовательность, которая производит ошибку
выполнения или, в худшем случае, на самом деле вредит системе.
Используя параметры невозможно сделать это, потому что параметр
рассматривают только как полевой параметр,
а не произвольную часть кода SQL.
string sql = "SELECT Name, HeadOfState FROM Country
WHERE Continent = @Continent";
cmd.Parameters.AddWithValue("@Continent", "North America");
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Tutorial5
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "SELECT Name, HeadOfState FROM Country
WHERE Continent=@Continent";
MySqlCommand cmd = new MySqlCommand(sql, conn);
Console.WriteLine("Enter a continent e.g. 'North America', 'Europe': ");
string user_input = Console.ReadLine();
cmd.Parameters.AddWithValue("@Continent", user_input);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine(rdr["Name"]+" --- "+rdr["HeadOfState"]);
}
rdr.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
Console.WriteLine("Done.");
}
}
6.1.5. Работа с хранимыми процедурами
CREATE PROCEDURE
и
CREATE FUNCTION
, которые
создают различные виды сохраненного кода.world
и введите следующую хранимую процедуру:
DELIMITER //
CREATE PROCEDURE country_hos (IN con CHAR(20))
BEGIN
SELECT Name, HeadOfState FROM Country WHERE Continent = con;
END //
DELIMITER ;
CALL country_hos('Europe');
MySqlCommand
создается, но вместо SQL-запроса в качестве параметра, это берет название
хранимой процедуры, чтобы вызвать. Установите объект
MySqlCommand
в тип хранимой процедуры,
как показано следующим фрагментом кода:
string rtn = "country_hos";
MySqlCommand cmd = new MySqlCommand(rtn, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@con", "Europe");
@con
, возможно, более
реалистично прибыло из ввода данных пользователем, но для простоты он
установлен как статическая последовательность в этом примере.ExecuteReader
.
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Tutorial6
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string rtn = "country_hos";
MySqlCommand cmd = new MySqlCommand(rtn, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@con", "Europe");
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine(rdr[0] + " --- " + rdr[1]);
}
rdr.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
Console.WriteLine("Done.");
}
}
6.2. Обучающая программа: Connector/NET ASP.NET
членство и ролевой поставщик
mysql
)
или другой подходящий инструмент. Не имеет значения, какое имя используется
для базы данных, но сделайте его запись. Вы определяете его в строке
подключения, построенной позже в этой обучающей программе. Эта база данных
содержит таблицы, автоматически составленные для вас позже, используемые,
чтобы хранить данные о пользователях и ролях.MySql.Data
и
MySql.Web
к проекту веб-сайта.machine.config
на вашей системе, который
является конфигурационным файлом для .NET Framework.machine.config
, чтобы найти
поставщика членства MySQLMembershipProvider
.autogenerateschema="true"
. Соответствующая секция должна теперь напоминать следующий пример.
<membership>
<providers>
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
...
connectionStringName="LocalSqlServer"
... />
<add name="MySQLMembershipProvider" autogenerateschema="true"
type="MySql.Web.Security.MySQLMembershipProvider,
MySql.Web, Version=6.0.4.0, Culture=neutral,
PublicKeyToken=c5687fc88969c44d"
connectionStringName="LocalMySqlServer"
... />
</providers>
</membership>
LocalMySqlServer
,
соединяется с сервером MySQL, который содержит базу данных членства.autogenerateschema="true"
заставит
Connector/NET тихо создавать или модернизировать схему на сервере базы
данных, содержащую необходимые таблицаы для того, чтобы
хранить информацию членства.web.config
для веб-сайта в Visual Studio.<connectionStrings>
.
Добавьте следующую информацию о строке подключения.
<connectionStrings>
<remove name="LocalMySqlServer"/>
<add name="LocalMySqlServer"
connectionString="Datasource=localhost;Database=users;uid=root;pwd=password"
providerName="MySql.Data.MySqlClient"/>
</connectionStrings>
SHOW DATABASES;
и
SHOW TABLES;
в интерпретаторе команд
mysql.
mysql>
SHOW DATABASES;
+---------------------+
| Database |
+---------------------+
| information_schema |
| mysql |
| test |
| users |
| world |
+---------------------+
5 rows in set (0.01 sec)
mysql> SHOW TABLES;
+---------------------------+
| Tables_in_users |
+---------------------------+
| my_aspnet_applications |
| my_aspnet_membership |
| my_aspnet_profiles |
| my_aspnet_roles |
| my_aspnet_schemaversion |
| my_aspnet_users |
| my_aspnet_usersinroles |
+---------------------------+
7 rows in set (0.00 sec)
mysql> SELECT * FROM my_aspnet_users;
mysql>SELECT * FROM my_aspnet_roles;
6.3. Обучающая программа: поставщик профиля Connector/NET ASP.NET
web.config
.
<system.web>
<anonymousIdentification enabled="true"/>
<profile defaultProvider="MySQLProfileProvider">
...
<properties>
<add name="Name" allowAnonymous="true"/>
<add name="Age" allowAnonymous="true" type="System.UInt16"/>
<group name="UI">
<add name="Color" allowAnonymous="true" defaultValue="Blue"/>
<add name="Style" allowAnonymous="true" defaultValue="Plain"/>
</group>
</properties>
</profile>
...
anonymousIdentification
= true
позволяет незаверенным пользователям использовать профили.
Они определяются GUID в cookie, а не именем пользователя.web.config
,
следующий шаг должен написать некоторый код, чтобы проверить профиль.
...
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
TextBox1.Text = Profile.Name;
TextBox2.Text = Profile.Age.ToString();
Label1.Text = Profile.UI.Color;
}
}
// Store Profile
protected void Button1_Click(object sender, EventArgs e)
{
Profile.Name = TextBox1.Text;
Profile.Age = UInt16.Parse(TextBox2.Text);
}
// Clear Form
protected void Button2_Click(object sender, EventArgs e)
{
TextBox1.Text = "";
TextBox2.Text = "";
Label1.Text = "";
}
// Retrieve Profile
protected void Button3_Click(object sender, EventArgs e)
{
TextBox1.Text = Profile.Name;
TextBox2.Text = Profile.Age.ToString();
Label1.Text = Profile.UI.Color;
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
Profile.UI.Color = DropDownList1.SelectedValue;
}
...
web.config
.
6.4. Обучающая программа: веб-поставщик персонализации
Минимальные требования
Формирование веб-поставщика персонализации MySQL
MySql.Data
и
MySql.Web
к веб-сайту или
проекту веб-приложения.system.web
файла
web.config
.
<webParts>
<personalization defaultProvider="MySQLPersonalizationProvider">
<providers>
<clear/>
<add name="MySQLPersonalizationProvider"
type="MySql.Web.Personalization.MySqlPersonalizationProvider,
MySql.Web, Version=6.9.3.0, Culture=neutral,
PublicKeyToken=c5687fc88969c44d"
connectionStringName="LocalMySqlServer" applicationName="/" />
</providers>
<authorization>
<allow verbs="modifyState" users="*" />
<allow verbs="enterSharedScope" users="*"/>
</authorization>
</personalization>
</webParts>
Создание веб-средств управления
WebPartZone
в первую и во
вторую колонки.CatalogZone
с
PageCatalogPart
и
EditorZone
в третью колонку.WebPartZone
,
который должен выглядеть подобным следующему примеру:
<table><tr><td>
<asp:WebPartZone ID="LeftZone" runat="server" HeaderText="Left Zone">
<ZoneTemplate>
<asp:Label ID="Label1" runat="server" title="Left Zone">
<asp:BulletedList ID="BulletedList1" runat="server">
<asp:ListItem Text="Item 1"></asp:ListItem>
<asp:ListItem Text="Item 2"></asp:ListItem>
<asp:ListItem Text="Item 3"></asp:ListItem>
</asp:BulletedList>
</asp:Label>
</ZoneTemplate>
</asp:WebPartZone></td>
<td>
<asp:WebPartZone ID="MainZone" runat="server" HeaderText="Main Zone">
<ZoneTemplate>
<asp:Label ID="Label11" runat="server" title="Main Zone">
<h2>This is the Main Zone</h2>
</asp:Label>
</ZoneTemplate>
</asp:WebPartZone></td>
<td><asp:CatalogZone ID="CatalogZone1" runat="server">
<ZoneTemplate>
<asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />
</ZoneTemplate>
</asp:CatalogZone>
<asp:EditorZone ID="EditorZone1" runat="server">
<ZoneTemplate>
<asp:LayoutEditorPart ID="LayoutEditorPart1" runat="server" />
<asp:AppearanceEditorPart ID="AppearanceEditorPart1" runat="server" />
</ZoneTemplate>
</asp:EditorZone>
</td></tr></table>
<asp:DropDownList ID="DisplayModes" runat="server" AutoPostBack="True"
OnSelectedIndexChanged="DisplayModes_SelectedIndexChanged">
</asp:DropDownList>
<asp:Button ID="ResetButton" runat="server" Text="Reset"
OnClick="ResetButton_Click" />
<asp:Button ID="ToggleButton" runat="server" OnClick="ToggleButton_Click"
Text="Toggle Scope" />
<asp:Label ID="ScopeLabel" runat="server"></asp:Label>
public partial class WebPart : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
foreach (WebPartDisplayMode mode in WebPartManager1.SupportedDisplayModes)
{
if (mode.IsEnabled(WebPartManager1))
{
DisplayModes.Items.Add(mode.Name);
}
}
}
ScopeLabel.Text = WebPartManager1.Personalization.Scope.ToString();
}
protected void ResetButton_Click(object sender, EventArgs e)
{
if (WebPartManager1.Personalization.IsEnabled &&
WebPartManager1.Personalization.IsModifiable)
{
WebPartManager1.Personalization.ResetPersonalizationState();
}
}
protected void ToggleButton_Click(object sender, EventArgs e)
{
WebPartManager1.Personalization.ToggleScope();
}
protected void DisplayModes_SelectedIndexChanged(object sender, EventArgs e)
{
var mode = WebPartManager1.SupportedDisplayModes[DisplayModes.SelectedValue];
if (mode != null && mode.IsEnabled(WebPartManager1))
{
WebPartManager1.DisplayMode = mode;
}
}
}
Тестирование веб-изменений
Shared
. Страница также включает выпадающий
список, кнопку Reset и средства управления Left Zone и Main Zone.
Design
,
Catalog
и
Edit
.Edit
или
Catalog
в определенном пользователе или общем
уровне. Дальше показан Catalog
выбранный из выпадающего списка, который включает элемент Catalog Zone,
который был добавлен ранее.
6.5. Обучающая программа: простой веб-поставщик членства
Требования
Создание и формирование нового проекта
MySql.Data
,
MySql.Data.Entities
и
MySql.Web
. Выбранные сборки должны
соответствовать версиям .NET Framework и Entity Framework,
добавленным к проекту шаблоном.web.config
, подобно следующему примеру.
<add name="MyConnection" connectionString="server=localhost;
UserId=root; password=pass; database=MySqlSimpleMembership;
logging=true;port=3305" providerName="MySql.Data.MySqlClient"/>
<system.data>
добавьте конфигурационную информацию, подобно следующему примеру.
<membership defaultProvider="MySqlSimpleMembershipProvider">
<providers>
<clear/>
<add name="MySqlSimpleMembershipProvider"
type="MySql.Web.Security.MySqlSimpleMembershipProvider,MySql.Web,
Version=6.9.2.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"
applicationName="MySqlSimpleMembershipTest"
description="MySQLdefaultapplication"
connectionStringName="MyConnection" userTableName="MyUserTable"
userIdColumn="MyUserIdColumn" userNameColumn="MyUserNameColumn"
autoGenerateTables="True"/>
</providers>
</membership>
connectionStringName
,
userTableName
,
userIdColumn
,
userNameColumn
и
autoGenerateTables
.userTableName
:
Название таблицы, чтобы хранить пользовательскую информацию.
Эта таблица независима от схемы, произведенной поставщиком, и это может
быть изменено в будущем.userId
:
Название колонки, которая хранит ID для записей в
userTableName
.userName
:
Название колонки, которая хранит имя пользователя для записей в
userTableName
.connectionStringName
:
Это значение должно соответствовать строке подключения, определенной в
файле web.config
.autoGenerateTables
: Должно быть
false
, если таблица уже существует.
DBContext
с формируемым именем строки подключения.
InitializeSimpleMembershipAttribute.cs
из каталога
Filters/
и найдите класс
SimpleMembershipInitializer
.
Найдите вызов метода
WebSecurity.InitializeDatabaseConnection
и обновите параметры с конфигурацией для
connectionStringName
,
userTableName
,
userIdColumn
и
userNameColumn
.UserProfile
и
Webpages_Membership
.
Добавление идентификации OAuth к проекту
AuthConfig.cs
в каталоге App_Start
.RegisterAuth
и раскомментируйте последнюю строку, где это вызывает
OauthWebSecurity.RegisterGoogleClient
.UserProfile
и
Webpages_OauthMembership
.
6.6. Обучающая программа: применение Entity Framework как источник
данных Windows Forms
world
, который можно
загрузить с MySQL Documentation page. Можно также найти детали о том,
как установить базу данных на той же самой странице.
Создание нового приложения Windows Forms
Добавление модели данных
world
.
Выберите символ EF Designer from database (или
Generate from database в более старых версиях
Visual Studio). Нажмите .localhost(world)
, которое
вы сделали ранее к базе данных. Выберите следующие пункты:App.config
:worldEntities
App.Config
, поскольку они будут использоваться
позже, чтобы написать необходимый управляющий код. Нажмите
.
Добавление нового источника данных
Используя источник данных в Windows Form
cityBindingSource
, Navigator связан с
cityBindingNavigator
.
Добавление кода, чтобы наполнить Data Grid View
EntityContainer
и получить данные из базы данных, чтобы его наполнить.
using System.Windows.Forms;
namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
worldEntities we;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
we = new worldEntities();
cityBindingSource.DataSource = we.city.ToList();
}
}
}
Добавление кода, чтобы сохранить изменения базы данных
True
.
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
we = new worldEntities();
cityBindingSource.DataSource = we.city.ToList();
}
private void cityBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
we.SaveChanges();
}
6.7. Обучающая программа: привязка данных в ASP.NET, используя
LINQ на Entities
world
до попытки работы с этой обучающей
программой. Посмотрите, например,
раздел 6.6 для получения инструкций относительно загрузки и установки
этой базы данных.Создание веб-сайта ASP.NET
world
.
Главная веб-страница показывает выпадающий список, из которого можно выбрать
страну. Данные о городах той страны тогда будут показаны в GridView.Column0
,
Column1
и
Column3
) и последовательность
abc
в каждой клетке сетки.world
в entities, которыми
можно управлять программно.Создание ADO.NET Entity Data Model
world
на уровне хранения. Процедура, чтобы сделать это, описана в
разделе 6.6.Наполнение поля списка при помощи
результатов запроса Entity LINQ
Page_Load
.
...
public partial class _Default : System.Web.UI.Page
{
worldModel.worldEntities we;
protected void Page_Load(object sender, EventArgs e)
{
we = new worldModel.worldEntities();
if (!IsPostBack)
{
var countryQuery = from c in we.country
orderby c.Name
select new { c.Code, c.Name };
DropDownList1.DataValueField = "Code";
DropDownList1.DataTextField = "Name";
DropDownList1.DataSource = countryQuery.ToList();
DataBind();
}
}
...
Наполнение Grid View при помощи запроса Entity LINQ
SelectedIndexChanged
.
Этот метод вызывают, когда пользователь выбирает пункт в списке
и таким образом производит событие AutoPostBack.
...
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
var cityQuery = from c in we.city
where c.CountryCode == DropDownList1.SelectedValue
orderby c.Name
select new { c.Name, c.Population, c.CountryCode };
GridView1.DataSource = cityQuery;
DataBind();
}
...
Name
,
Population
и
CountryCode
.
6.8. Обучающая программа: создание MySQL DDL из модели Entity Framework
MySql.Data.Entity
.
6.9. Обучающая программа: основные операции CRUD с Connector/NET
Минимальные требования
world_x
.
Импортируйте образец документа
world_x
:
world_x.zip
с
http://dev.mysql.com/doc/index-other.html./tmp/
.world_x.sql
.
shell>
mysql -u root -p
world_x.sql
, чтобы
создать структуру базы данных и вставить данные следующим образом:
mysql>
SOURCE /temp/world_x.sql;
/temp/
на путь к файлу
world_x.sql
в вашей системе.Добавьте ссылки на необходимые DLL
MySql.Data.dll
Google.Protobuf.dll
Пространства имен для импорта
using MySqlX.XDevAPI;
using MySqlX.XDevAPI.Common;
using MySqlX.XDevAPI.CRUD;
Создайте сессию
string schemaName = "world_x";
// Define the connection string
string connectionURI = "mysqlx://test:test@localhost:33060";
Session session = MySQLX.GetSession(connectionURI);
// Get the schema object
Schema schema = session.GetSchema(schemaName);
Найдите строку в коллекции
// Use the collection 'countryinfo'
var myCollection = schema.GetCollection("countryinfo");
var docParams = new DbDoc(new { name1 = "Albania", _id1 = "ALB" });
// Find a document
DocResult foundDocs = myCollection.Find("Name = :name1 || _id = :_id1").Bind(docParams).Execute();
while (foundDocs.Next())
{
Console.WriteLine(foundDocs.Current["Name"]);
Console.WriteLine(foundDocs.Current["_id"]);
}
Вставьте новый документ в коллекцию
// Insert a new document with an identifier
var obj = new { _id = "UKN", Name = "Unknown" };
Result r = myCollection.Add(obj).Execute();
Обновите существующий документ
// using the same docParams object previously created
docParams = new DbDoc(new { name1 = "Unknown", _id1 = "UKN" });
r = myCollection.Modify("_id = :Id").Bind("id", "UKN").Set("GNP", "3308").Execute();
if (r.AffectedItemsCount == 1)
{
foundDocs = myCollection.Find("Name = :name1|| _id = :_id1").Bind(docParams).Execute();
while (foundDocs.Next())
{
Console.WriteLine(foundDocs.Current["Name"]);
Console.WriteLine(foundDocs.Current["_id"]);
Console.WriteLine(foundDocs.Current["GNP"]);
}
}
Удалите определенный документ
r = myCollection.Remove("_id = :id").Bind("id", "UKN").Execute();
Закройте сессию
session.Close();
Полный пример кода
using MySqlX.XDevAPI;
using MySqlX.XDevAPI.Common;
using MySqlX.XDevAPI.CRUD;
using System;
namespace MySQLX_Tutorial
{
class Program
{
static void Main(string[] args)
{
string schemaName = "world_x";
string connectionURI = "mysqlx://test:test@localhost:33060";
Session session = MySQLX.GetSession(connectionURI);
Schema schema = session.GetSchema(schemaName);
// Use the collection 'countryinfo'
var myCollection = schema.GetCollection("countryinfo");
var docParams = new DbDoc(new { name1 = "Albania", _id1 = "ALB" });
// Find a document
DocResult foundDocs = myCollection.Find("Name = :name1 || _id = :_id1").Bind(docParams).Execute();
while (foundDocs.Next())
{
Console.WriteLine(foundDocs.Current["Name"]);
Console.WriteLine(foundDocs.Current["_id"]);
}
// Insert a new document with an id
var obj = new { _id = "UKN", Name = "Unknown" };
Result r = myCollection.Add(obj).Execute();
// update an existing document
docParams = new DbDoc(new { name1 = "Unknown", _id1 = "UKN" });
r = myCollection.Modify("_id = :Id").Bind("id", "UKN").Set("GNP", "3308").Execute();
if (r.AffectedItemsCount == 1)
{
foundDocs = myCollection.Find("Name = :name1|| _id = :_id1").Bind(docParams).Execute();
while (foundDocs.Next())
{
Console.WriteLine(foundDocs.Current["Name"]);
Console.WriteLine(foundDocs.Current["_id"]);
Console.WriteLine(foundDocs.Current["GNP"]);
}
}
// delete a row in a document
r = myCollection.Remove("_id = :id").Bind("id", "UKN").Execute();
// close the session
session.Close();
Console.ReadKey();
}
}
}
6.10. Обучающая программа: формирование SSL с Connector/NET
./mysql-test/std_data
.
ssl-ca=path/to/repo/mysql-test/std_data/cacert.pem
ssl-cert=path/to/repo/mysql-test/std_data/server-cert.pem
ssl-key=path/to/repo/mysql-test/std_data/server-key.pem
SslCa
принимает сертификаты формата
PEM и PFX, используя расширение файла, чтобы определить, как обработать
сертификат. Измените cacert.pem
на
cacert.pfx
, если вы намереваетесь продолжить
с PFX в этой обучающей программе.root
и создайте
пользователя sslclient
(с паролем
test
). Затем предоставьте привилегии новой
учетной записи пользователя следующим образом:
CREATE USER sslclient@'%' IDENTIFIED BY 'test' REQUIRE SSL;
GRANT ALL PRIVILEGES ON *.* TO sslclient@'%';
6.10.1. Сертификаты PEM в Connector/NET
).
В вашем приложении добавьте строку подключения, используя базу данных
server-repository-root
/mysql-test/std_datatest
и пользователя
sslclient
:SslMode
к необходимому уровню безопасности. Сертификаты PEM требуются только для
for VerifyCA
и
VerifyFull
. Все другие значения режима
игнорируют сертификат, даже если им его предоставляют.
using (MySqlConnection connection = new MySqlConnection(
"database=test;user=sslclient;" + "SslMode=VerifyFull"
SslMode
=
VerifyFull
, необходимо также предоставить
значения для опций SslCa
,
SslCert
и SslKey
.
Каждый выбор должен указать на файл с расширением
.pem
.
"SslCa=ca.pem;" + "SslCert=client-cert.pem;" + "SslKey=client-key.pem;"))
VerifyCA
, нужна только опция
SslCa
.
using (MySqlConnection connection = new MySqlConnection(
"database=test;user=sslclient;" + "SslMode=VerifyFull" +
"SslCa=ca.pem;" + "SslCert=client-cert.pem;" +
"SslKey=client-key.pem;"))
{
connection.Open();
}
6.10.2. Сертификаты PFX в Connector/NET
./mysql-test/std_data
). Преобразуйте их
сначала к PFX-формату. Этот формат также известен как PKCS#12.Создание файла сертификата, чтобы
использовать с .NET-клиентом
:server-repository-root
/mysql-test/std_data
openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem \
-certfile cacert.pem -out client.pfx
client.pfx
создан. Этот файл используется в обучающей программе.Соединение с сервером, используя
основанные на файле сертификаты
client.pfx
,
который вы создали на предыдущем шаге, чтобы подтвердить подлинность клиента.
Следующий пример демонстрирует, как соединиться с использованием опций
SslMode
,
CertificateFile
и
CertificatePassword
.
using (MySqlConnection connection = new MySqlConnection(
"database=test;user=sslclient;" +
"CertificateFile=H:\\git\\mysql-trunk\\mysql-test\\std_data\\client.pfx;" +
"CertificatePassword=pass;" + "SslMode=Required "))
{
connection.Open();
}
SslMode
проверяет сертификат для всех
режимов SSL, кроме None
.
Соединение с сервером, используя хранилище сертификатов
client.pfx
в Personal Store.
Дважды щелкните по файлу в Windows Explorer.
Это запустит Certificate Import Wizard.Исследование сертификатов в хранилище
mmc.exe
.
using (MySqlConnection connection = new MySqlConnection(
"database=test;user=sslclient;" +
"Certificate Store Location=CurrentUser;" + "SslMode=Required"))
{
connection.Open();
}
Параметр отпечатка сертификата
47 94 36 00 9a 40 f3 01 7a 14 5c f8 47 9e 76 94 d7
aa de f0
. Этот отпечаток может использоваться в строке подключения,
как иллюстрирует следующий код:
using (MySqlConnection connection = new MySqlConnection(
"database=test;user=sslclient;" +
"Certificate Store Location=CurrentUser;" +
"Certificate Thumbprint=479436009a40f3017a145cf8479e7694d7aadef0;"+
"SSL Mode=Required"))
{
connection.Open();
}
6.11. Обучающая программа: используя MySqlScript
MySqlScript
.
Этот класс позволяет вам выполнить строку запросов. В зависимости от
обстоятельств это может быть более удобно, чем использование подхода
MySqlCommand
.MySqlScript
может быть найдена в справочной
документации, поставляемой с MySQL Connector/NET.
CREATE DATABASE TestDB;
USE TestDB;
CREATE TABLE TestTable (id INT NOT NULL PRIMARY KEY
AUTO_INCREMENT, name VARCHAR(100));
MySqlScript
это
Execute
. Он вызывает скрипт
(последовательность запросов) назначенный на значение свойства
Query объекта MySqlScript.
Свойство Query может быть установлено через
конструктор MySqlScript
или при помощи параметра Query.
Execute
возвращает
количество выполненных запросов.MySqlScript
выполнит указанный скрипт на связи, используя значение
Connection.
Это значение может быть установлено непосредственно или через
конструктор MySqlScript
.
Следующие фрагменты кода иллюстрируют это:
string sql = "SELECT * FROM TestTable";
...
MySqlScript script = new MySqlScript(conn, sql);
...
MySqlScript script = new MySqlScript();
script.Query = sql;
script.Connection = conn;
...
script.Execute();
script.Error += new MySqlScriptErrorEventHandler(script_Error);
script.ScriptCompleted += new EventHandler(script_ScriptCompleted);
script.StatementExecuted += new MySqlStatementExecutedEventHandler(script_StatementExecuted);
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
namespace MySqlScriptTest
{
class Program
{
static void Main(string[] args)
{
string connStr = "server=localhost;user=root;database=TestDB;port=3306;password=******";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "INSERT INTO TestTable(name) VALUES ('Superman');" +
"INSERT INTO TestTable(name) VALUES ('Batman');" +
"INSERT INTO TestTable(name) VALUES ('Wolverine');" +
"INSERT INTO TestTable(name) VALUES ('Storm');";
MySqlScript script = new MySqlScript(conn, sql);
script.Error += new MySqlScriptErrorEventHandler(script_Error);
script.ScriptCompleted += new EventHandler(script_ScriptCompleted);
script.StatementExecuted += new MySqlStatementExecutedEventHandler(script_StatementExecuted);
int count = script.Execute();
Console.WriteLine("Executed " + count + " statement(s).");
Console.WriteLine("Delimiter: " + script.Delimiter);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
Console.WriteLine("Done.");
}
static void script_StatementExecuted(object sender,
MySqlScriptEventArgs args)
{
Console.WriteLine("script_StatementExecuted");
}
static void script_ScriptCompleted(object sender, EventArgs e)
{
/// EventArgs e will be EventArgs.Empty for this method
Console.WriteLine("script_ScriptCompleted!");
}
static void script_Error(Object sender, MySqlScriptErrorEventArgs args)
{
Console.WriteLine("script_Error: " + args.Exception.ToString());
}
}
}
script_ScriptCompleted
параметр EventArgs
e
должен быть
EventArgs.Empty
. В случае
ScriptCompleted
там не дополнительные данные,
которые будут получены, поскольку объект события
EventArgs.Empty
.
Используя разделители с MySqlScript
CREATE PROCEDURE test_routine()
BEGIN
SELECT name FROM TestTable ORDER BY name;
SELECT COUNT(name) FROM TestTable;
END
MySqlScript
интерпретировал бы вышеупомянутое как два запроса, первый:
CREATE PROCEDURE test_routine()
BEGIN
SELECT name FROM TestTable ORDER BY name;
MySqlScript
поддерживает способность
установить иной разделитель. Это достигается через значение свойства
Delimiter. Например, вы могли установить
разделитель в ??, в этом случае вышеупомянутый
код больше не производил бы ошибку, когда выполнен. Многочисленные запросы
могут быть разграничены в скрипте, так например, у вас могло быть три запроса
в скрипте, такие как:
string sql = "DROP PROCEDURE IF EXISTS test_routine??" +
"CREATE PROCEDURE test_routine() " + "BEGIN " +
"SELECT name FROM TestTable ORDER BY name;" +
"SELECT COUNT(name) FROM TestTable;" + "END??" +
"CALL test_routine()";
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data;
using MySql.Data.MySqlClient;
namespace ConsoleApplication8
{
class Program
{
static void Main(string[] args)
{
string connStr = "server=localhost;user=root;database=TestDB;port=3306;password=******";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql ="DROP PROCEDURE IF EXISTS test_routine??" +
"CREATE PROCEDURE test_routine() " + "BEGIN " +
"SELECT name FROM TestTable ORDER BY name;" +
"SELECT COUNT(name) FROM TestTable;" + "END??" +
"CALL test_routine()";
MySqlScript script = new MySqlScript(conn);
script.Query = sql;
script.Delimiter = "??";
int count = script.Execute();
Console.WriteLine("Executed " + count + " statement(s)");
script.Delimiter = ";";
Console.WriteLine("Delimiter: " + script.Delimiter);
Console.WriteLine("Query: " + script.Query);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
Console.WriteLine("Done.");
}
}
}
Найди своих коллег! |
Вы можете направить письмо администратору этой странички, Алексею Паутову.