Создание баз данных MySQL
Для каждого сайта мы рекомендуем создавать отдельную базу данных.
Для создания новой базы данных перейдите в раздел Базы данных панели управления хостингом, а затем выберите кнопку Создать базу.
.png)
В новом окне введите имя базы и нажмите кнопку Создать.
В меню Принадлежность из выпадающего списка выберите сайт, который будет использовать данную базу, нажмите на кнопку Сохранить.
.png)
Далее нажмите на кнопку Добавить пользователя, где из выпадающего списка выберите необходимого MySQL-пользователя. В поле Права рекомендуется установить значение Полный доступ. Далее необходимо нажать кнопку Создать.
.png)
На этом настройка завершена. Теперь вы можете использовать базу данных для размещения нового сайта.
Общие сведения о работе с базой данных на сайтах веб-страницы ASP.NET (Razor)
Версии программного обеспечения, используемые в этом руководстве
- веб-страницы ASP.NET (Razor) 2
- WebMatrix 2
Общие сведения о базах данных
Представьте себе типичную адресную книгу. Для каждой записи в адресной книге (т. е. для каждого человека) у вас есть несколько элементов информации, таких как имя, фамилия, адрес, адрес электронной почты и номер телефона.
Типичный способ изображения таких данных — таблица со строками и столбцами. В терминах базы данных каждую строку часто называют записью. Каждый столбец (иногда называемый полями) содержит значение для каждого типа данных: имя, фамилия и т. д.
| Идентификатор | FirstName | LastName | Адрес | Электронная почта | Номер телефона |
|---|---|---|---|---|---|
| 1 | Артем | Абрус | 210 100-й Санкт-СЕ Косатки WA 98031 | jim@contoso.com | 555 0100 |
| 2 | Terry | Адамс (Adams) | 1234 Main St. Seattle WA 99011 | terry@cohowinery.com | 555 0101 |
Для большинства таблиц базы данных таблица должна содержать столбец, содержащий уникальный идентификатор, например номер клиента, номер счета и т. д. Это называется первичным ключом таблицы, и он используется для идентификации каждой строки в таблице. В этом примере столбец id является первичным ключом адресной книги.
Благодаря этому базовому пониманию баз данных вы можете научиться создавать простую базу данных и выполнять такие операции, как добавление, изменение и удаление данных.
Реляционные базы данных
Вы можете хранить данные различными способами, включая текстовые файлы и электронные таблицы. Однако для большинства бизнес-применений данные хранятся в реляционной базе данных.
В этой статье не подробно рассматриваются базы данных. Тем не менее, вам может быть полезно понять немного о них. В реляционной базе данных сведения логически делятся на отдельные таблицы. Например, база данных для учебного заведения может содержать отдельные таблицы для учащихся и предложений классов. Программное обеспечение базы данных (например, SQL Server) поддерживает мощные команды, позволяющие динамически устанавливать связи между таблицами. Например, с помощью реляционной базы данных можно установить логическую связь между учащимися и классами, чтобы создать расписание. Хранение данных в отдельных таблицах снижает сложность структуры таблицы и снижает необходимость хранения избыточных данных в таблицах.
Создание базы данных
В этой процедуре показано, как создать базу данных с именем SmallBakery с помощью средства проектирования базы данных SQL Server Compact, включенного в WebMatrix. Хотя базу данных можно создать с помощью кода, более типично создавать базу данных и таблицы базы данных с помощью средства проектирования, такого как WebMatrix.
- Запустите WebMatrix и на странице Быстрого запуска щелкните Сайт из шаблона.
- Выберите Пустой сайт и в поле Имя сайта введите «SmallBakery» и нажмите кнопку ОК. Сайт создается и отображается в WebMatrix.
- В левой области щелкните рабочую область Базы данных .
- На ленте щелкните Создать базу данных. Создается пустая база данных с тем же именем, что и у сайта.
- В левой области разверните узел SmallBakery.sdf и щелкните Таблицы.
- На ленте щелкните Создать таблицу. WebMatrix открывает конструктор таблиц.
![[Снимок экрана: веб-матрица, открываемая конструктор таблиц.]](https://learn.microsoft.com/ru-ru/aspnet/web-pages/overview/data/5-working-with-data/_static/image1.jpg)
- Щелкните столбец Имя и введите «Id».
- В столбце Тип данных выберите int.
- Задайте для параметров Первичный ключ? и Является ли определение? значение Да. Как следует из названия, Параметр Является первичным ключом сообщает базе данных, что это будет первичный ключ таблицы. Указывает , что база данных автоматически создает идентификационный номер для каждой новой записи и назначает ему следующий последовательный номер (начиная с 1).
- Щелкните следующую строку. Редактор запускает новое определение столбца.
- В поле Имя введите «Имя».
- В поле Тип данных выберите «nvarchar» и задайте длину 50. Часть nvarchar var сообщает базе данных, что данные для этого столбца будут строкой, размер которой может отличаться от записи к записи. (Префикс n представляет national, указывая, что поле может содержать символьные данные, представляющие любой алфавит или систему письма, то есть, что поле содержит данные Юникода.)
- Задайте для параметра Разрешить значения NULL значение Нет. Это приведет к тому, что столбец Name не останется пустым.
- С помощью этого же процесса создайте столбец с именем Description. Задайте для параметра Тип данных значение nvarchar и 50 для длины, а для параметра Allow Nulls задайте значение false.
- Создайте столбец с именем Price. Задайте для параметра Тип данных значение money , а для параметра Allow Nulls задайте значение false.
- В поле в верхней части назовите таблицу «Product». Когда все будет готово, определение будет выглядеть следующим образом:
![[Снимок экрана: как будет выглядеть определение после завершения.]](https://learn.microsoft.com/ru-ru/aspnet/web-pages/overview/data/5-working-with-data/_static/image2.png)
- Нажмите клавиши CTRL+S, чтобы сохранить таблицу.
Добавление данных в базу данных
Теперь вы можете добавить некоторые примеры данных в базу данных, с которыми вы будете работать далее в этой статье.
- В левой области разверните узел SmallBakery.sdf и щелкните Таблицы.
- Щелкните правой кнопкой мыши таблицу Product и выберите пункт Данные.
- В области редактирования введите следующие записи:
| имя; | Описание | Цена |
|---|---|---|
| Хлеб | Запеченный свежий каждый день. | 2,99 |
| Клубничный короткий кейк | Сделано с органической клубникой из нашего сада. | 9,99 |
| Apple Pie | Уступает только пирогу вашей мамы. | 12,99 |
| Пекан Пирог | Если вы любите пекан, это для вас. | 10.99 |
| Лимонный пирог | Сделано с лучшими лимонами в мире. | 11.99 |
| Кексы | Ваши дети и ребенок в вас будут любить эти. | 7,99 |
![[Снимок экрана: как будет выглядеть конструктор таблиц после ввода данных.]](https://learn.microsoft.com/ru-ru/aspnet/web-pages/overview/data/5-working-with-data/_static/image3.jpg)
Помните, что вам не нужно вводить ничего для столбца Id . При создании столбца Id для его свойства Is Identity задается значение true, что приводит к автоматическому заполнению столбца. После ввода данных конструктор таблиц будет выглядеть следующим образом:
Отображение данных из базы данных
Получив базу данных с данными, вы можете отобразить их на веб-странице ASP.NET. Чтобы выбрать отображаемые строки таблицы, используйте инструкцию SQL, которая является командой, передаваемой в базу данных.
- В левой области щелкните рабочую область Файлы .
- В корне веб-сайта создайте страницу CSHTML с именем ListProducts.cshtml.
- Замените существующую разметку следующей:
@ < var db = Database.Open("SmallBakery"); var selectQueryString = "SELECT * FROM Product ORDER BY Name"; > Small Bakery Products table, th, td Small Bakery Products
Id Product Description Price @foreach(var row in db.Query(selectQueryString)) < @row.Id @row.Name @row.Description @row.Price >
В первом блоке кода открывается созданный ранее файл SmallBakery.sdf (база данных). Метод Database.Open предполагает, что SDF-файл находится в папке App_Data веб-сайта. (Обратите внимание, что вам не нужно указывать расширение SDF — на самом деле, если вы это сделаете, Open метод не будет работать.)
Примечание Папка App_Data — это специальная папка в ASP.NET, которая используется для хранения файлов данных. Дополнительные сведения см. в разделе Подключение к базе данных далее в этой статье.
Затем выполняется запрос на запрос к базе данных с помощью следующей инструкции SQL Select :
SELECT * FROM Product ORDER BY Name
Язык SQL
SQL — это язык, который используется в большинстве реляционных баз данных для управления данными в базе данных. Он включает команды, которые позволяют извлекать и обновлять данные, а также создавать, изменять и администрировать таблицы базы данных. SQL отличается от языка программирования (например, который вы используете в WebMatrix), так как в SQL идея заключается в том, что вы сообщаете базе данных, что хотите, и это задача базы данных — выяснить, как получить данные или выполнить задачу. Ниже приведены примеры некоторых команд SQL и их назначение.
SELECT Id, Name, Price FROM Product WHERE Price > 10.00 ORDER BY Name
При этом столбцы Id, Name и Price извлекается из записей в таблице Product , если значение Price больше 10, и возвращает результаты в алфавитном порядке на основе значений столбца Name . Эта команда возвращает результирующий набор, содержащий записи, соответствующие условиям, или пустой набор, если записи не совпадают.
INSERT INTO Product (Name, Description, Price) VALUES («Croissant», «A flaky delight», 1.99)
При этом в таблицу Product вставляется новая запись, задав для столбца Имя значение «Круассан», для столбца «Описание » значение «A flaky delight» и для значения цены значение 1,99.
DELETE FROM Product WHERE ExpirationDate < "01/01/2008"
Эта команда удаляет записи в таблице Product , столбец даты окончания срока действия которых раньше 1 января 2008 г. (При этом предполагается, что в таблице Product есть такой столбец, конечно.) Дата вводится здесь в формате ММ/ДД/ГГГГ, но она должна быть введена в формате, который используется для вашего языкового стандарта.
Команды Insert Into и Delete не возвращают результирующие наборы. Вместо этого они возвращают число, указывающее, сколько записей было затронуто командой .
Для некоторых из этих операций (например, вставки и удаления записей) процесс, запрашивающий операцию, должен иметь соответствующие разрешения в базе данных. Именно поэтому для рабочих баз данных часто требуется указывать имя пользователя и пароль при подключении к базе данных.
Существуют десятки команд SQL, но все они следуют следующему шаблону. Команды SQL можно использовать для создания таблиц базы данных, подсчета количества записей в таблице, вычисления цен и выполнения многих других операций.
Вставка данных в базу данных
В этом разделе показано, как создать страницу, которая позволяет пользователям добавлять новый продукт в таблицу базы данных Product . После вставки новой записи продукта на странице отображается обновленная таблица с помощью страницы ListProducts.cshtml , созданной в предыдущем разделе.
Страница включает проверку, чтобы убедиться, что данные, вводимые пользователем, являются допустимыми для базы данных. Например, код на странице гарантирует, что для всех обязательных столбцов введено значение.
- На веб-сайте создайте файл CSHTML с именем InsertProducts.cshtml.
- Замените существующую разметку следующей:
@ < Validation.RequireField("Name", "Product name is required."); Validation.RequireField("Description", "Product description is required."); Validation.RequireField("Price", "Product price is required."); var db = Database.Open("SmallBakery"); var Name = Request.Form["Name"]; var Description = Request.Form["Description"]; var Price = Request.Form["Price"]; if (IsPost && Validation.IsValid()) < // Define the insert query. The values to assign to the // columns in the Product table are defined as parameters // with the VALUES keyword. if(ModelState.IsValid) < var insertQuery = "INSERT INTO Product (Name, Description, Price) " + "VALUES (@0, @1, @2)"; db.Execute(insertQuery, Name, Description, Price); // Display the page that lists products. Response.Redirect("~/ListProducts"); >> > Add Products label fieldset legend .validation-summary-errors Add New Product
@Html.ValidationSummary("Errors with your submission:")
Текст страницы содержит HTML-форму с тремя текстовыми полями, которые позволяют пользователям ввести имя, описание и цену. Когда пользователи нажимают кнопку Вставка , код в верхней части страницы открывает подключение к базе данных SmallBakery.sdf . Затем вы получите значения, отправленные пользователем с помощью объекта , Request и назначьте их локальным переменным. Чтобы убедиться, что пользователь ввел значение для каждого обязательного столбца, необходимо зарегистрировать каждый элемент, который требуется проверить:
Validation.RequireField("Name", "Product name is required."); Validation.RequireField("Description", "Product description is required."); Validation.RequireField("Price", "Product price is required.");
Помощник Validation проверяет наличие значения в каждом зарегистрированном поле. Вы можете проверить, прошли ли все поля проверку, проверив Validation.IsValid() , что обычно делается перед обработкой сведений, полученных от пользователя:
if (IsPost && Validation.IsValid()) < // Process information here >
(Оператор && означает И — этот тест имеет значение , если это отправка формы И все поля прошли проверку.) Если все столбцы проверены (ни один из них не был пустым), создайте инструкцию SQL для вставки данных, а затем выполните ее, как показано ниже:
var insertQuery = "INSERT INTO Product (Name, Description, Price) VALUES (@0, @1, @2)";
Для вставляемых значений необходимо включить заполнители параметров ( @0 , @1 , @2 ).
Примечание В качестве меры безопасности всегда передайте значения в инструкцию SQL с помощью параметров, как показано в предыдущем примере. Это дает возможность проверить данные пользователя, а также помогает защититься от попыток отправки вредоносных команд в базу данных (иногда называемых атаками путем внедрения кода SQL).
Чтобы выполнить запрос, используйте следующую инструкцию, передавая ей переменные, содержащие значения для замены заполнителей:
db.Execute(insertQuery, Name, Description, Price);
После выполнения инструкции Insert Into пользователь отправляется на страницу со списком продуктов с помощью этой строки:
Response.Redirect("~/ListProducts");
Если проверка не выполнена, вставку можно пропустить. Вместо этого на странице есть вспомогательный помощник, который может отображать накопленные сообщения об ошибках (если таковые имеются):
@Html.ValidationSummary("Errors with your submission:")
Тестирование страницы вставки
- Просмотр страницы в браузере. На странице отображается форма, похожая на ту, которая показана на следующем рисунке.
![[Снимок экрана: форма, которая будет отображаться на странице в браузере.]](https://learn.microsoft.com/ru-ru/aspnet/web-pages/overview/data/5-working-with-data/_static/image5.jpg)
- Введите значения для всех столбцов, но не забудьте оставить столбец Цена пустым.
- Нажмите кнопку Вставить. На странице отображается сообщение об ошибке, как показано на следующем рисунке. (Новая запись не создается.)
![[Снимок экрана: сообщение об ошибке.]](https://learn.microsoft.com/ru-ru/aspnet/web-pages/overview/data/5-working-with-data/_static/image6.jpg)
- Заполните форму полностью и нажмите кнопку Вставить. На этот раз отобразится страница ListProducts.cshtml , на котором отображается новая запись.
Обновление данных в базе данных
После ввода данных в таблицу может потребоваться обновить их. В этой процедуре показано, как создать две страницы, похожие на страницы, созданные ранее для вставки данных. На первой странице отображаются продукты и пользователи могут выбрать один из них для изменения. Вторая страница позволяет пользователям вносить изменения и сохранять их.
Важно На рабочем веб-сайте обычно ограничивается, кому разрешено вносить изменения в данные. Сведения о настройке членства и способах авторизации пользователей для выполнения задач на сайте см. в статье Добавление безопасности и членства на сайт веб-страницы ASP.NET.
- На веб-сайте создайте новый CSHTML-файл с именем EditProducts.cshtml.
- Замените существующую разметку в файле следующим кодом:
@ < var db = Database.Open("SmallBakery"); var selectQueryString = "SELECT * FROM Product ORDER BY Name"; > Edit Products table, th, td Edit Small Bakery Products
Name Description Price @foreach (var row in db.Query(selectQueryString)) < Edit @row.Name @row.Description @row.Price >
Единственное отличие этой страницы от страницы ListProducts.cshtml от предыдущей заключается в том, что html-таблица на этой странице содержит дополнительный столбец, отображающий ссылку Изменить . Щелкнув эту ссылку, вы перейдете на страницу UpdateProducts.cshtml (которую вы создадите далее), где можно изменить выбранную запись. Просмотрите код, создающий ссылку Изменить :
Edit Edit Edit
![[Снимок экрана: данные, отображаемые на странице в браузере.]](https://learn.microsoft.com/ru-ru/aspnet/web-pages/overview/data/5-working-with-data/_static/image7.jpg)
Обратите внимание, что href атрибут имеет значение UpdateProducts/n , где n — это номер продукта. Когда пользователь щелкает одну из этих ссылок, результирующий URL-адрес будет выглядеть примерно так: http://localhost:18816/UpdateProducts/6 Иными словами, номер продукта, который необходимо изменить, будет передан в URL-адресе.
@ < Validation.RequireField("Name", "Product name is required."); Validation.RequireField("Description", "Product description is required."); Validation.RequireField("Price", "Product price is required."); var Name = ""; var Description = ""; var Price = Decimal.Zero; var ProductId = UrlData[0]; if (ProductId.IsEmpty()) < Response.Redirect("~/EditProducts"); >var db = Database.Open("SmallBakery"); if (IsPost && Validation.IsValid()) < var updateQueryString = "UPDATE Product SET Name=@0, Description=@1, Price=@2 WHERE ; Name = Request["Name"]; Description = Request["Description"]; Price = Request["Price"].AsDecimal(); db.Execute(updateQueryString, Name, Description, Price, ProductId); Response.Redirect(@Href("~/EditProducts")); >else < var selectQueryString = "SELECT * FROM Product WHERE var row = db.QuerySingle(selectQueryString, ProductId); Name = row.Name; Description = row.Description; Price = row.Price; >> Add Products label < float: left; width: 8em; text-align: right; margin-right: 0.5em;>fieldset < padding: 1em; border: 1px solid; width: 35em;>legend < padding: 2px 4px; border: 1px solid; font-weight: bold;>.validation-summary-errors Update Product
@Html.ValidationSummary("Errors with your submission:")
Текст страницы содержит HTML-форму, в которой отображается продукт и где пользователи могут его редактировать. Чтобы отобразить продукт, используйте следующую инструкцию SQL:
SELECT * FROM Product WHERE
При этом будет выбран продукт, идентификатор которого соответствует значению, передаваемого в параметре @0 . (Так как id является первичным ключом и поэтому должен быть уникальным, таким образом можно выбрать только одну запись продукта.) Чтобы получить значение идентификатора, передаваемое в эту Select инструкцию, можно прочитать значение, передаваемое на страницу как часть URL-адреса, используя следующий синтаксис:
var ProductId = UrlData[0];
Чтобы получить запись продукта, используйте QuerySingle метод , который возвращает только одну запись:
var row = db.QuerySingle(selectQueryString, ProductId);
Одна строка возвращается в переменную row . Вы можете получить данные из каждого столбца и назначить их локальным переменным следующим образом:
var Name = row.Name; var Description = row.Description; var Price = row.Price;
В разметке для формы эти значения автоматически отображаются в отдельных текстовых полях с помощью внедренного кода, как показано ниже:
В этой части кода отображается обновляемая запись продукта. После отображения записи пользователь может изменять отдельные столбцы. Когда пользователь отправляет форму, нажимая кнопку Обновить , выполняется код в блоке if(IsPost) . Он получает значения пользователя из Request объекта , сохраняет их в переменных и проверяет заполнение каждого столбца. Если проверка пройдена, код создает следующую инструкцию Обновления SQL:
UPDATE Product SET Name=@0, Description=@1, Price=@2, WHERE
В инструкции SQL Update необходимо указать каждый обновляющийся столбец и значение, которое необходимо задать для него. В этом коде значения задаются с помощью заполнителей @0 параметров , @1 , @2 и т. д. (Как отмечалось ранее, для обеспечения безопасности всегда следует передавать значения в инструкцию SQL с помощью параметров.) При вызове db.Execute метода передаются переменные, содержащие значения в порядке, соответствующем параметрам в инструкции SQL:
db.Execute(updateQueryString, Name, Description, Price, ProductId);
После выполнения инструкции Update вызовите следующий метод, чтобы перенаправить пользователя обратно на страницу редактирования:
Response.Redirect(@Href("~/EditProducts"));
![[Снимок экрана: страница Обновления продуктов вместе с выбранной записью.]](https://learn.microsoft.com/ru-ru/aspnet/web-pages/overview/data/5-working-with-data/_static/image8.jpg)
В результате пользователь видит обновленный список данных в базе данных и может редактировать другой продукт.
Удаление данных в базе данных
В этом разделе показано, как разрешить пользователям удалять продукт из таблицы базы данных product . Пример состоит из двух страниц. На первой странице пользователи выбирают запись для удаления. Затем запись, которую нужно удалить, отображается на второй странице, которая позволяет им подтвердить, что они хотят удалить запись.
Важно На рабочем веб-сайте обычно ограничивается, кому разрешено вносить изменения в данные. Сведения о том, как настроить членство и как авторизовать пользователя для выполнения задач на сайте, см. в статье Добавление безопасности и членства на веб-страницы ASP.NET сайт.
- На веб-сайте создайте файл CSHTML с именем ListProductsForDelete.cshtml.
- Замените существующую разметку следующей:
@ < var db = Database.Open("SmallBakery"); var selectQueryString = "SELECT * FROM Product ORDER BY Name"; > Delete a Product table, th, td Delete a Product
Эта страница аналогична предыдущей странице EditProducts.cshtml . Однако вместо отображения ссылки Изменить для каждого продукта отображается ссылка Удалить . Ссылка «Удалить » создается с помощью следующего внедренного кода в разметке:
@ < var db = Database.Open("SmallBakery"); var ProductId = UrlData[0]; if (ProductId.IsEmpty()) < Response.Redirect("~/ListProductsForDelete"); >var prod = db.QuerySingle("SELECT * FROM PRODUCT WHERE ProductId); if( IsPost && !ProductId.IsEmpty()) < var deleteQueryString = "DELETE FROM Product WHERE db.Execute(deleteQueryString, ProductId); Response.Redirect("~/ListProductsForDelete"); >> Delete Product Delete Product - Confirmation
Эта страница вызывается listProductsForDelete.cshtml и позволяет пользователям подтвердить, что они хотят удалить продукт. Чтобы получить список удаляемого продукта, вы получите идентификатор удаляемого продукта из URL-адреса с помощью следующего кода:
var ProductId = UrlData[0];
Затем страница предлагает пользователю нажать кнопку, чтобы фактически удалить запись. Это важная мера безопасности: при выполнении конфиденциальных операций на веб-сайте, таких как обновление или удаление данных, эти операции всегда должны выполняться с помощью операции POST, а не get. Если сайт настроен таким образом, что операция удаления может быть выполнена с помощью операции GET, любой пользователь может передать URL-адрес, например http://
if( IsPost && !ProductId.IsEmpty()) < var deleteQueryString = "DELETE FROM Product WHERE db.Execute(deleteQueryString, ProductId); Response.Redirect("~/ListProductsForDelete"); >
![[Снимок экрана: запуск продуктов списка для удаления точки CSHTML в браузере.]](https://learn.microsoft.com/ru-ru/aspnet/web-pages/overview/data/5-working-with-data/_static/image9.jpg)
Код выполняет инструкцию SQL, которая удаляет указанную запись, а затем перенаправляет пользователя обратно на страницу со списком.
Соединение с базой данных
Подключиться к базе данных можно двумя способами. Первый — использовать Database.Open метод и указать имя файла базы данных (за вычетом расширения SDF ):
var db = Database.Open(«SmallBakery»);
Метод Open предполагает, что объект .SDF-файл находится в папке App_Data веб-сайта. Эта папка предназначена специально для хранения данных. Например, он имеет соответствующие разрешения, позволяющие веб-сайту считывать и записывать данные, а в качестве меры безопасности WebMatrix не разрешает доступ к файлам из этой папки.
Второй способ — использовать строку подключения. Строка подключения содержит сведения о том, как подключиться к базе данных. Это может быть путь к файлу или имя базы данных SQL Server на локальном или удаленном сервере, а также имя пользователя и пароль для подключения к этому серверу. (Если данные хранятся в централизованно управляемой версии SQL Server, например на сайте поставщика услуг размещения, вы всегда используете строку подключения для указания сведений о подключении к базе данных.)
В WebMatrix строки подключения обычно хранятся в XML-файле с именемWeb.config. Как следует из названия, вы можете использовать файлWeb.config в корне веб-сайта для хранения сведений о конфигурации сайта, включая любые строки подключения, которые могут потребоваться вашему сайту. Пример строки подключения в файлеWeb.config может выглядеть следующим образом. Примечание $CREDENTIAL_PLACEHOLDER$ — это заполнитель для пары «ключ-значение» пароля:
В этом примере строка подключения указывает на базу данных в экземпляре SQL Server, который выполняется где-то на сервере (в отличие от локального SDF-файла). Необходимо заменить соответствующие имена для myServer и myDatabase , а также указать SQL Server значения входа для username и password . (Значения имени пользователя и пароля не обязательно совпадают с вашими учетными данными Windows или значениями, предоставленными поставщиком услуг размещения для входа на свои серверы. Обратитесь к администратору за точными значениями.)
Метод Database.Open является гибким, так как позволяет передать имя SDF-файла базы данных или имя строки подключения, хранящейся в файлеWeb.config . В следующем примере показано, как подключиться к базе данных с помощью строки подключения, показанной в предыдущем примере:
Как уже отмечалось, Database.Open метод позволяет передать имя базы данных или строку подключения и выяснить, какие из них следует использовать. Это очень полезно при развертывании (публикации) веб-сайта. SDF-файл можно использовать в папке App_Data при разработке и тестировании сайта. Затем при перемещении сайта на рабочий сервер можно использовать строку подключения в файлеWeb.config , имя которого совпадает с именем SDF-файла , но указывающее на базу данных поставщика услуг размещения. Все это без необходимости изменения кода.
Наконец, если вы хотите работать непосредственно со строкой подключения, можно вызвать Database.OpenConnectionString метод и передать ему фактическую строку подключения, а не только имя в файлеWeb.config . Это может быть полезно в ситуациях, когда по какой-либо причине у вас нет доступа к строке подключения (или значениям в ней, таким как имя SDF-файла ), пока страница не будет запущена. Однако в большинстве сценариев можно использовать Database.Open , как описано в этой статье.
Дополнительные ресурсы
- SQL Server Compact
- Подключение к базе данных SQL Server или MySQL в WebMatrix
- Проверка пользовательского ввода на сайтах веб-страниц ASP.NET
#15 — Создание базы данных и подключение к ней

В этом уроке мы создадим и подключимся к базе даных используя PHP. Это позволит в дальнейшем работать с базой данных через код: добавлять записи, редактировать их, удалять, создавать новые таблички и так далее.
Видеоурок
Материалы для курса
Чтобы скачивать материалы к видеокурсам необходимо оформить подписку на сайт
Создание PHP+MySQL сайта: от простого к сложному — шаг первый
Для создания перспективного, расширяемого и эффективного сайта любой сложности следует начинать с простого. Это процесс нелёгкий, требует определённых базовых знаний PHP и MySQL, но если его рассмотреть по пунктам — то можно составить своего рода «рабочий план», который пригодится при создании новых сайтов. Подготовим «ядро» и базу для проекта. Вначале это будет обычный сайт визитка, но потом, добавляя функционал, его можна превратить во что угодно. Итак, приступим.
1. Подготовка базы данных. Создаём первую таблицу в БД MySQL
Создаём новую базу данных, например «mysite». Лично я привык работать с кодировкой UTF-8, по-этому сразу оговорюсь: проследите, чтобы все текстовые файлы сайта, сама база, таблицы и поля таблиц были в одной кодировке.
В новой базе делаем таблицу. Назовём её «pages». В этой таблице будут храниться статические страницы будущего сайта и информация о них. Таблица должна содержать следующие поля:
- page_id — идентификатор страницы (SMALLINT, primary key, auto_increment);
- page_alias — псевдоним страницы для строки адреса ЧПУ (VARCHAR, 255);
- page_title — название страницы в окне браузера (VARCHAR, 255);
- page_meta_d — мета описание страницы для тега meta description (VARCHAR, 255);
- page_meta_k — мета ключевые слова для тега meta keywords (VARCHAR, 255);
- page_h1 — заголовок страницы (VARCHAR, 255);
- page_s_desc — краткое описание материала, например если материалы сайта будут в виде блога (TEXT);
- page_content — основной текст страницы, который будет выводиться в центральную колонку сайта (TEXT);
- page_publish — содержит «Y» — если страница опубликована, или «N» — если она скрыта (CHAR, по умолчанию «Y»).
Сразу после создания таблицы вставляем в неё значения для главной страницы сайта. В поле «page_alias» для главной страницы предлагаю вставить значение «home». Метатеги — соответственно тематике всего сайта. Таким же образом можно посоздавать другие страницы, например «О компании» с алиасом «about» и своими метатегами, или «Контакты» с алиасом «contacts» и т.д.
2. Создаём файл конфигурации сайта
В корневой папке сайта, которая должна быть пуста на данном этапе, создаём папочку «cfg», в ней с помощью .htaccess закрываем доступ директивой «deny from all». Создаём файл core.php следующего содержания:
// MYSQL
class MyDB
var $dblogin = «root»; // ВАШ ЛОГИН К БАЗЕ ДАННЫХ
var $dbpass = «»; // ВАШ ПАРОЛЬ К БАЗЕ ДАННЫХ
var $db = «mysite»; // НАЗВАНИЕ БАЗЫ ДЛЯ САЙТА
var $dbhost=»localhost»;
var $link;
var $query;
var $err;
var $result;
var $data;
var $fetch;
function connect() $this->link = mysql_connect($this->dbhost, $this->dblogin, $this->dbpass);
mysql_select_db($this->db);
mysql_query(‘SET NAMES utf8’);
>
function close() mysql_close($this->link);
>
function run($query) $this->query = $query;
$this->result = mysql_query($this->query, $this->link);
$this->err = mysql_error();
>
function row() $this->data = mysql_fetch_assoc($this->result);
>
function fetch() while ($this->data = mysql_fetch_assoc($this->result)) $this->fetch = $this->data;
return $this->fetch;
>
>
function stop() unset($this->data);
unset($this->result);
unset($this->fetch);
unset($this->err);
unset($this->query);
>
>
Этот файл пока содержит только простой класс подключения к базе данных, но в дальнейшем в него можно добавлять разные полезные функции, которые будут доступны из любого места в коде сайта. Не забудьте изменить логин и пароль к Вашей базе.
Если Вы работаете в среде Windows, я могу порекоммендовать использовать редактор Notepad++. В этом редакторе есть нумерация строк, и он легко переводит текст из одной кодировки в другую. ВНИМАНИЕ! Если Вы работаете в кодировке UTF-8 — конвертируйте файлы в UTF-8 without BOM — это поможет избежать проблем в будущем.
3. Создаём index.php — главный контроллер сайта
Файл конфигурации создан. Теперь в корневой папке сайта создаём index.php — это и будет основной скрипт сайта, своего рода «главный контроллер». Содержание файла index.php:
define(«INDEX», «»); // УСТАНОВКА КОНСТАНТЫ ГЛАВНОГО КОНТРОЛЛЕРА
require_once($_SERVER[DOCUMENT_ROOT].»/cfg/core.php»); // ПОДКЛЮЧЕНИЕ ЯДРА
// ПОДКЛЮЧЕНИЕ К БД
$db = new MyDB();
$db->connect();
// ГЛАВНЫЙ КОНТРОЛЛЕР
switch ($_GET[option]) case «page»:
include($_SERVER[DOCUMENT_ROOT].»/com/page.php»);
break;
default:
include($_SERVER[DOCUMENT_ROOT].»/com/home.php»);
break;
>
include ($_SERVER[DOCUMENT_ROOT].»/template.php»);
$db->close();
Переменная $_GET[option] будет указывать главному контроллеру какой компонент сайта загружать при запросе. Сейчас в нашем сайте предусмотрено только два компонента: «страница» и «главная страница» (в принципе можно обойтись и одним компонентом вывода обычной страницы, но часто вид главной страницы сайта отличается от обычных страниц пунктов меню). Логика работы главного контроллера такова: из URL строки извлекается название нужного компонента (значение переменной $option), в зависимости от его значения подключается файл самого компонента (содержится в папке /com). Файл компонента выполняет все необходимые работы, извлекает из базы данные и записывает их в переменные, для передачи в шаблон дизайна. В самом конце подключается файл дизайна сайта, в который и передаются все переменные и данные, извлечённые в компонентах. Это звучит намного сложнее, чем работает.
4. Создаём компонент вывода обычной страницы
В корне сайта создаём папочку «com» — в ней будут храниться файлы компонентов. Компонент сайта, в моём понимании — это файл, в котором происходит обработка данных для разных разделов сайта. Например компонент обычной страницы извлекает из базы данных название, описание и текст материала, и записывает их в переменные $title, $meta_d, $meta_k, $content и др. Эти данные потом передаются в шаблон дизайна (под каждый компонент можно создавать свой шаблон дизайна) и выводятся пользователю в виде HTML-страницы. Например, компонент каталога, который можно создать в будущем, выполнял бы почти то же самое, но с данными про товары — а там своя специфика, другие поля в таблице, итд. По-этому для каждого функционального раздела сайта стоит создавать отдельный компонент. В схеме MVC (Model-View-Controller) компонент выполняет роль модели.
Создаём в папке «com» файл «page.php». Содержимое файла следущее:
/* КОМПОНЕНТ СТРАНИЦЫ */
$alias = $_GET[alias];
$query = «SELECT * FROM pages WHERE page_alias='».$alias.»‘ AND page_publish=’Y’ LIMIT 1″;
$db->run($query);
$db->row();
// ПЕРЕМЕННЫЕ КОМПОНЕНТА
$id = $db->data[page_id];
$alias = $db->data[page_alias];
$title = $db->data[page_title];
$h1 = $db->data[page_h1];
$meta_d = $db->data[page_meta_d];
$meta_k = $db->data[page_meta_k];
$s_desc = $db->data[page_s_desc];
$component = $db->data[page_content];
// ЕСЛИ СТРАНИЦЫ НЕ СУЩЕСТВУЕТ
if (!$id) header(«HTTP/1.1 404 Not Found»);
$component = «ОШИБКА 404! Данной страницы не существует»;
>
$db->stop();
5. Создаём компонент вывода главной страницы
Главная страница у нас в базе данных хранится под псевдонимом «home», и пока по своей структуре не отличается от обычных страниц сайта — это просто статья. Тем не менее создадим для неё отдельный компонент — на перспективу, так сказать.
Содержимое компонента «home.php» в папке «com» почти совпадает с содержимым компонента обычной страницы, за исключением строки запроса к базе и названия компонента. Строка запроса теперь выглядит так:
$query = «SELECT * FROM wx_pages WHERE page_alias=’home’ LIMIT 1»;
6. Создаём шаблон дизайна всего сайта
В корне сайта создаём файл template.php. По сути это обычный макет web-дизайна в формате HTML+CSS, только с PHP переменными в нужных местах. Между тегами title вставочка , в центральной колонке сайта вставочка и так по всему шаблону расставляем нужные переменные, которые объявлены в компонентах.
В корневой папке также должны быть папки «css» и «images» для элементов дизайна. В файле /css/style.css — можно настроить стили по своему усмотрению.
7. Чистые ссылки и файл .htaccess
Для создания чистых ссылок я использую mod_rewrite с прямыми указаниями правил для каждого компонента отдельно, так как разбор адресной строки средствами самого контроллера считаю излишним функционалом. Содержимое .htaccess на данном этапе такое:
# ЗАПРЕЩЁННЫЕ ФАЙЛЫ
RewriteRule .htaccess — [F]
RewriteRule template.php — [F]
# ПРАВИЛА mod_rewrite
RewriteRule page/([a-z0-9_-]+)([\/])\.htm$ index.php?option=page&alias=$1 [L]
В будущем мы будем дописывать правила для компонентов поиска, каталога, блога статей и т.д. Смысл один: преобразовать ссылки вида «mysite.com/index.php?option=pages&alias=about» в ссылку вида «mysite.com/pages/about.htm» — смотрится довольно красиво. Старайтесь в разработке избегать массива $_GET в целях безопасности и не надеяться на него. Целесообразно хранить в нём только параметры для главного контроллера (переменная $option) и для компонента (переменная $alias).
Также в каждой папке сайта «на всякий случай» создайте пустой файл index.html — это нужно для того, чтобы при обращении к каталогу через адресную строку ничего не отображалось.