Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метода ИТ.doc
Скачиваний:
12
Добавлен:
07.11.2018
Размер:
2.76 Mб
Скачать

База данных проекта

База данных, необходимая для работы приложения Анкета, состоит из четырех взаимосвязанных таблиц. В этом разделе рассмотрены отношения между таблицами и полями, которые они содержат.

SurveyAnswers

SurveyResponses

Рис. 13.2. Структура проекта Анкета

Таблица Survey является таблицей высшего уровня в базе данных проекта Анкета. Она содержит тексты заголовков и инструкций для анкет.

Таблица SurveyQuestions хранит тексты вопросов. Она связана отношением « один-ко-многим» с таблицей Survey. В каждой анкете может присутствовать много вопросов, но каждый вопрос помещен только в одну анкету.

Таблица SurveyAnswers включает все возможные варианты ответов на вопросы. Эта таблица связана отношением «один-ко-многим» с таблицей SurveyQuestions.

Каждый вариант ответа соответствует конкретному вопросу, но на каждый вопрос может существовать произвольное число ответов.

В таблице SurveyResponses содержится информация о том, какой вариант ответа выбрал посетитель на тот или иной вопрос. Таблица также находится в отношении «один-ко-многим » с таблицей SurveyQuestions, потому что на один и тот же вопрос могут ответить многие посетители, но каждый посетитель выбирает лишь один ответ.

Имя поля Тип данных Примечания

Таблица Survey( файл Survery.txt)

SurveyID int Первичный ключ,

идентификационный столбец

SurveyName varchar Название анкеты.

Длина – 50 символов

SurveyInstruction varchar Текст инструкции по

заполнению анкеты, который

видит посетитель, впервые

открывая страницу.

Длина – 255 символов

SurveyResponse varchar Текст, появляющийся перед

посетителем после заполнения

анкеты .

Длина -255 символов

Имя поля Тип данных Примечания

Таблица SurveyQuestions(файл SurveyQuestions.txt)

SuveyQuestionID int Первичный ключ,

идентификационный столбец

SurveyID int Внешний ключ для связи с

таблицей Surveys

SurveyQuestionShort varchar Текст вопроса для отображе

ния на странице

Результаты опроса.

Длина – 50 символов

SurveyQuestionLong varchar Текст вопроса, который

выводится на странице

Анкета. Длина – 255 символов

Имя поля Тип данных Примечания

Таблица SurveyAnswers(файл SurveyAnswers.txt)

SurveyAnswerID int Первичный ключ,

идентфикационный столбец

SurveyQuestionID int Внешний ключ для связи с

таблицей

SurveyQuestions

SurveyAnswer varchar Текст ответа.

Длина – 50 символов

Таблица SuveyResponses(файл SurveyResponses.txt)

SurveyResponseID int Первичный ключ, идентификационный столбец

SurveyQuestionID int Внешний ключ для связи с

таблицей

SurveyQuestions

SurveyResponse varchar Данные об ответе

посетителя на вопрос.

Длина – 50 символов

Приложение Анкета состоит из двух страниц ASP.NET. Ниже приведен код страницы Анкета :

<%@ Page Language=VB Debug=true %>

<%@ Import Namespace="System.Data" %>

<%@ Import Namespace="System.Data.OLEDB" %>

<HTML>

<HEAD>

<TITLE>Анкета</TITLE>

</HEAD>

<script runat=”server”>

Sub Page_Load(ByVal Sender as Object, ByVal E as EventArgs)

Dim DBConn as OleDbConnection

Dim DBCommand As OleDbDataAdapter

Dim DSPageData as New DataSet

Dim I as Integer

Dim J as Integer

Dim TempID as String

Application("SurveyID") = 2

Application("SurveyID") = 1

DBConn = New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;" _

& "DATA SOURCE=" _

& Server.MapPath("/WebApplication3/”_

& "Access/C3Survey.mdb;"))

DBCommand = New OleDbDataAdapter _

("Select SurveyName, SurveyInstructions " _

& "From Surveys Where SurveyID = " _

& Application("SurveyID"), DBConn)

DBCommand.Fill(DSPageData, _

"SurveyInfo")

lblTitle.Text = "<CENTER>" _

& DSPageData.Tables("SurveyInfo"). _

Rows(0).Item("SurveyName") & "</CENTER>"

lblMessage.Text = DSPageData.Tables("SurveyInfo"). _

Rows(0).Item("SurveyInstructions")

DBCommand = New OleDbDataAdapter _

("Select SurveyQuestionID, SurveyQuestionLong " _

& "From SurveyQuestions Where SurveyID = " _

& Application("SurveyID"), DBConn)

DBCommand.Fill(DSPageData, _

"SurveyQuestions")

For I = 0 to DSPageData.Tables("SurveyQuestions"). _

Rows.Count - 1

Dim lcHTML = New LiteralControl

lcHTML.Text = DSPageData.Tables("SurveyQuestions"). _

Rows(I).Item("SurveyQuestionLong") & "<BR>"

pnlQuestions.Controls.Add(lcHTML)

Dim MyDDL = New DropDownList

TempID = DSPageData.Tables("SurveyQuestions"). _

Rows(I).Item("SurveyQuestionID")

MyDDL.ID = "Q" & TempID

DBCommand = New OleDbDataAdapter _

("Select SurveyAnswer " _

& "From SurveyAnswers Where SurveyQuestionID = " _

& TempID, DBConn)

DBCommand.Fill(DSPageData, _

TempID)

For J = 0 to DSPageData.Tables(TempID). _

Rows.Count – 1

Dim MyItem = New ListItem

MyItem.Text = DSPageData.Tables(TempID). _

Rows(J).Item("SurveyAnswer")

MyDDL.Items.Add(MyItem)

Next

pnlQuestions.Controls.Add(MyDDL)

lcHTML = New LiteralControl

lcHTML.Text = "<BR><BR>"

pnlQuestions.Controls.Add(lcHTML)

Next

End Sub

Sub SubmitBtn_Click(Sender As Object, E As EventArgs)

Dim DBConn as OleDbConnection

Dim DBInsert As New OleDbCommand

Dim DBCommand As OleDbDataAdapter

Dim DSPageData as New DataSet

Dim MyControl as Control

Dim MyDDL as DropDownList

DBConn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" _

& "DATA SOURSE=" _

& Server.MapPath("/WebApplication3/;" _

& "C3Survey.mdb;"))

DBInsert.Connection = DBConn

DBInsert.Connection.Open

For Each MyControl in pnlQuestions.Controls

If MyControl.GetType().FullName = _

"System.Web.UI.WebControls.DropDownList" Then

MyDDL = MyControl

DBInsert.CommandText = "Insert Into SurveyResponses " _

& "(SurveyQuestionID, SurveyResponse) " _

& "values (" _

& Mid(MyDDL.ID, 2) & ", " _

& "'" _

& Replace(MyDDL.SelectedItem.Text, "'", "''") _

& "')"

DBInsert.ExecuteNonQuery()

End If

Next

DBCommand = New OleDbDataAdapter _

("Select SurveyResponse " _

& "From Surveys Where SurveyID = " _

& Application("SurveyID"), DBConn)

DBCommand.Fill(DSPageData, _

"SurveyInfo")

lblMessage.Text = DSPageData.Tables("SurveyInfo"). _

Rows(0).Item("SurveyResponse")

pnlQuestions.Visible = False

butOK.Visible = False

End Sub

</SCRIPT>

</HEAD>

<BODY BACKGROUND="./lightblue.gif" TEXT="black" LINK="darkblue" VLINK="darkblue" ALINK="red" LEFTMARGIN="40">

<form runat="server"ID=”Forml”>

<asp:Label id="lblTitle" BorderWidth="7px" BorderStyle=7

Width="90%"

Font-Size="25pt"

Font-Name="Arial"

runat="server"/>

<Font Face="Arial">

<BR>

<BR>

<asp:Label

id="lblMessage"

Font-Bold="True"

runat="server"/>

<BR>

<BR>

<asp:Panel id="pnlQuestions" Width="90%"

runat="server">

</asp:Panel>

<asp:button id="butOK" text=" OK " Type="Submit"

OnClick="SubmitBtn_Click"

runat="server"/>

</Font>

</Form>

</BODY>

</HTML>

Код на странице Анкета отображает вопросы, задаваемые посетителю, и добавляет их ответы в базу данных. В начале страницы помещены три директивы компилятора:

<%@ Page Language=VB Debug=true %>

<%@ Import Namespace="System.Data" %>

<%@ Import Namespace="System.Data.OLEDB" %>

Первая директива указывает компилятору язык, используемый в коде, и задает работу страниц в режиме отладки:

<%@ Page Language=VB Debug=true %>

Режим отладки позволяет получить в некоторых случаях более подробные сообщения об ошибках, но не забудьте отключить такой режим перед вводом приложения в эксплуатацию. Другие две директивы импортируют библиотеки, необходимые для вывода данных и доступа к базе данных:

<%@ Import Namespace="System.Data" %>

<%@ Import Namespace="System.Data.OLEDB" %>