Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
07 ADO.NET.doc
Скачиваний:
13
Добавлен:
22.11.2019
Размер:
196.1 Кб
Скачать

[Visual c#]

using System.Data.SqlClient;

namespace SalesApplication

{

public partial class productAdministrationForm : Form

{

private DatabaseConnection myDatabaseConnection = new

DatabaseConnection();

private SqlCommand mySqlCommand;

public productAdministrationForm()

{

InitializeComponent();

// Initialize mySqlCommand to available database connection.

mySqlCommand = myDatabaseConnection.GetCommandObject();

}

private void updateProductsButton_Click(object sender, EventArgs e)

{

try

{

decimal productPrice = decimal.Parse(productPriceTextBox.Text);

mySqlCommand.CommandType = CommandType.Text;

mySqlCommand.CommandText = "UPDATE Production.Product SET "

+ "ListPrice = " + productPrice;

myDatabaseConnection.OpenConnection();

int numberOfRowsUpdated = mySqlCommand.ExecuteNonQuery();

myDatabaseConnection.CloseConnection();

MessageBox.Show(numberOfRowsUpdated.ToString() +

" rows have been successfully updated.", "Update Result");

}

catch (Exception Ex)

{

MessageBox.Show(Ex.Message, "Exception");

}

}

...

}

[Visual Basic]

...

Imports System.Data.SqlClient

Public Class productAdministrationForm

Private myDatabaseConnection As DatabaseConnection = New DatabaseConnection

Private mySqlCommand As SqlCommand

Public Sub New()

InitializeComponent

' Initialize mySqlCommand to available database connection.

mySqlCommand = myDatabaseConnection.GetCommandObject()

End Sub

Private Sub updateProductsButton_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles updateProductsButton.Click

Try

Dim productPrice As Decimal = Decimal.Parse(productPriceTextBox.Text)

mySqlCommand.CommandType = CommandType.Text

mySqlCommand.CommandText = _

"UPDATE Production.Product SET ListPrice = " _

& productPrice

myDatabaseConnection.OpenConnection()

Dim numberOfRowsUpdated As Integer = mySqlCommand.ExecuteNonQuery()

myDatabaseConnection.CloseConnection()

MessageBox.Show _

(numberOfRowsUpdated.ToString() & " rows have been successfully updated.", _

"Update Result")

Catch Ex As Exception

MessageBox.Show(Ex.Message, "Exception")

End Try

End Sub

...

End Class

  • Скомпилируйте и проверьте приложение SalesApplication

  1. Для компиляции приложения Adventure Works Sales System в меню Build кликните Build Solution.

  2. Запустите приложение Adventure Works Sales System в меню Debug кликните Start Debugging

  3. В форме Main Form кликните Sales Administration, чтобы открыть форму Sales Administration Form

  4. Протестируйте Sales Administration Form, проверьте что общее количество отображенных продаж составляет 31465.

  5. Закройте форму Sales Administration Form

  6. В форме Main Form нажмите Product Administration.

  7. В форме Product Administration Form, в блоке Enter a price, введите 405.75 и затем нажмите Update All Products Prices.

  8. В диалоговом окне Update Result, проверьте что число обновленных строк 504, а затем нажмите OK.

  9. Закройте форму Product Administration Form.

  10. Закройте приложение Adventure Works Sales System.

Упражнение 2: Создание и выполнение команд запроса

В этом упражнении Вы напишете код ADO.NET, чтобы получить набор данных по продажам в базе данных AdventureWorks. Затем Вы выполните обход результирующего набора и отобразите его содержание в приложении SalesApplication.

Основные задачи этого упражнения указаны ниже:

• Вызовите существующее соединение с базой данных.

• Создайте и заполните объект SqlDataReader.

• Выполните обход объекта SqlDataReader и отобразите результаты в Windows Form.

• Скомпилируйте и проверьте приложение SalesApplication.

Используйте существующее соединение с базой данных, чтобы возвратить объект SqlDataReader

1. В обзоре решений, щелкните правой кнопкой мыши на salesAdministrationForm, а затем кликните View Code.

2. В методе GetSalesInformation, в блоке try, найдите комментарий TODO: [L7.2 Ex 2] Get sales information. Ниже этого комментария, добавьте код, чтобы выполнить следующее:

a. Установите свойство CommandType объекта mySqlCommand как CommandType.Text.

b. Укажите в свойстве CommandText объекта mySqlCommand SQL запрос, который получает поля SalesOrderID, OrderDate и TotalDue из таблицы SalesOrderHeader.

c. Вызовите метод OpenConnection объекта myDatabaseConnection.

d. Создайте объект SqlDataReader под названием reader и присвойте ему ссылку на объект, возвращаемый методом ExecuteReader объекта mySqlCommand.

Ваш код должен выглядеть примерно так:

[Visual C#]

private void GetSalesInformation()

{

try

{

mySqlCommand.CommandType = CommandType.Text;

mySqlCommand.CommandText =

"SELECT SalesOrderID, OrderDate, TotalDue FROM Sales.SalesOrderHeader";

myDatabaseConnection.OpenConnection();

SqlDataReader reader = mySqlCommand.ExecuteReader();

}

catch (Exception Ex)

{

MessageBox.Show(Ex.Message);

}

}

[Visual Basic]

Private Sub GetSalesInformation()

Try

mySqlCommand.CommandType = CommandType.Text

mySqlCommand.CommandText = _

"SELECT SalesOrderID, OrderDate, TotalDue FROM Sales.SalesOrderHeader"

myDataBaseConnection.OpenConnection()

Dim reader As SqlDataReader = mySqlCommand.ExecuteReader()

Catch Ex As Exception

MessageBox.Show(Ex.Message)

End Try

End Sub

Выполнение обход объекта SqlDataReader и извлечение результирующего набора

1. В классе salesAdministrationForm, в методе GetSalesInformation, в блоке try, определите местонахождение комментария TODO: [L7.2 Ex 2] Iterate through data. Ниже этого комментария, добавьте код, чтобы выполнить следующее:

a. Создайте переменную с именем count целочисленного типа, и инициализируйте её значением 0.

b. Создайте условный оператор, который проверяет свойство HasRows объекта reader, чтобы определить, содержит ли он какие-нибудь строки.

c. В условном операторе добавляют do/while цикл, с условием проверки: счетчик count не равен 10.

d. В do/while цикле:

i. Вызовите метод Read для объекта.

ii. Добавьте результаты запроса SQL к salesInformationListBox. Код этого запроса содержится в файле L7.2 Ex2_starterText.txt. Для Visual C# файл находится в папке E:\Labfiles\Starter\CS\ , и для Visual Basic файл находится в папке E:\Labfiles\Starter\VB\ .

iii. Увеличьте счетчик цикла на 1.

e. В условном операторе, вызовите метод Close объекта.

f. Вызовите метод CloseConnection объекта myDatabaseConnection.

2. В меню File, кликните Save All.

Ваш код должен выглядеть примерно так:

[Visual C#]

private void GetSalesInformation()

{

try

{

...

int count = 0;

if (reader.HasRows)

{

do

{

reader.Read();

salesInformationListBox.Items.Add("Order ID Order Date Total Due");

salesInformationListBox.Items.Add(reader.GetSqlValue(0).ToString()

+ " " + reader.GetSqlValue(1).ToString()

+ " " + reader.GetSqlValue(2).ToString());

salesInformationListBox.Items.Add("");

count++;

}

while (count != 10);

reader.Close();

}

myDatabaseConnection.CloseConnection();

}

catch (Exception Ex)

{

MessageBox.Show(Ex.Message);

}

}

[Visual Basic]

Private Sub GetSalesInformation()

Try

...

Dim count As Integer = 0

If reader.HasRows Then

Do

reader.Read

salesInformationListBox.Items.Add("Order ID Order Date Total Due")

salesInformationListBox.Items.Add(reader.GetSqlValue(0).ToString() & _

" " & reader.GetSqlValue(1).ToString() & _

" " & reader.GetSqlValue(2).ToString())

salesInformationListBox.Items.Add("")

count += 1

Loop While Not (count = 10)

reader.Close()

End If

myDatabaseConnection.CloseConnection()

Catch Ex As Exception

MessageBox.Show(Ex.Message)

End Try

End Sub

Обратитесь к методу GetSalesInformation

• В событии salesAdministrationForm_Load, добавьте код, чтобы вызвать метод GetSalesInformation.

Ваш код должен выглядеть примерно так:

[Visual C#]

private void salesAdministrationForm_Load(object sender, EventArgs e)

{

...

GetSalesInformation();

}

[Visual Basic]

Private Sub salesAdministrationForm_Load(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles MyBase.Load{

...

GetSalesInformation()

End Sub

Скомпилируйте и протестируйте приложение SalesApplication.

1. В меню File, нажмите Save All.

2. Чтобы компилировать приложение Adventure Works Sales System, в меню Build, кликните Build Solution.

3. Чтобы выполнить приложение AdventureWorksSalesSystem, в меню Debug, кликните Start Debugging.

4. В форме MainForm, кликните SalesAdministration, чтобы открыть форму SalesAdministrationForm.

5. Просмотрите информацию о заказах, отображенную в управлении Listbox.

6. Закройте форму SalesAdministrationForm.

7. Закройте форму AdventureWorkSalesSystem.

Контрольный список результатов:

Ниже приведен список результатов, для проверки успешного выполнения Вами лабораторной работы. Убедитесь, что Вы:

  • Программно соединились с базой данных AdventureWorks.

  • Добавили код ADO.NET, чтобы получить общее количество продаж.

  • Добавили код ADO.NET, чтобы обновить цену по прейскуранту всей продукции.

  • Добавили код ADO.NET, чтобы получить набор данных о продажах с использованием объекта SqlDataReader.

Примечание: Не выключайте приложение, потому что Вы будете использовать его в третьей части лабораторной работы.

Упражнение 1: Чтение и запись DataSet как данных XML.

В этом упражнении, Вы напишете код для экспорта ContactDataSet в новый XML документ. Вы затем создадите новое приложение в среде Windows для чтения XML документа.

Основные задачи для этого упражнения следующие:

  • Написание кода для экспорта ContactDataSet в новый XML документ.

  • Создание нового приложения Windows Forms.

  • Добавление кода в новое приложение Windows Forms для чтения XML документа.

  • Компиляция и тестирование обоих приложений.

  • Сохранение ContactDataSet в виде XML

  1. Откройте файл SalesApplication.sln, если он ещё не открыт, находящийся в папке E:\Labfiles\Starter\CS\SalesApplication или E:\Labfiles\Starter\VB\SalesApplication.

  2. В обзоре решений правой кнопкой мыши кликните contactAdministrationForm и потом нажмите View Code.

  3. В классе contactAdministrationForm определите местоположение комментария TODO: [L7.3 Ex1] Create file location constant. Ниже этого комментария, объявите строковую постоянную с именем CONTACTDETAILS_FILENAME и присвойте ей значение "E:\Labfiles\Starter\CS\ContactDetails.xml".

  4. В обработчике событий exportButton_Click определите местоположение комментария TODO: [L7.3 Ex1] Export data. Ниже комментария добавьте код для записи contactDataSet как XML в файл, путь к которому определен в переменной CONTACTDETAILS_FILENAME. Настройте XmlWriteMode в режим IgnoreSchema.

  5. В обработчике событий exportButton_Click добавьте код для отображения MessageBox со следующими свойствами:

    1. Сообщение Your data has been exported to: следует переменная CONTACTDETAILS_FILENAME.

    2. Заголовок Export Successful.

Ваш код должен выглядеть примерно так:

[Visual C#]

namespace SalesApplication

{

public partial class contactAdministrationForm : Form

{

const string CONTACTDETAILS_FILENAME =

@"E:\Labfiles\Starter\CS\ContactDetails.xml";

...

private void exportButton_Click(object sender, EventArgs e)

{

this.contactDataSet.WriteXml(CONTACTDETAILS_FILENAME,

XmlWriteMode.IgnoreSchema);

MessageBox.Show("Your data has been exported to: " +

CONTACTDETAILS_FILENAME, "Export Successful");

}

}

...

}

[Visual Basic]

Public Class contactAdministrationForm

Const CONTACTDETAILS_FILENAME As String = _

"E:\Labfiles\Starter\VB\ContactDetails.xml"

...

Private Sub exportButton_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles exportButton.Click

Me.contactDataSet.WriteXml(CONTACTDETAILS_FILENAME, _

XmlWriteMode.IgnoreSchema)

MessageBox.Show("Your data has been exported to: " & _

CONTACTDETAILS_FILENAME, "Export Successful")

...

End Sub

End Class

  • Экспорт ContactDataSet как XML

  1. В меню File нажмите Save All.

  2. Для компиляции приложения Adventure Works Sales System в меню Build нажмите Build Solution.

  3. Для запуска приложения Adventure Works Sales System в меню Debug нажмите Start Debugging.

  4. На форме главного окна приложения нажмите Contact Administration для открытия формы Contact Administration Form.

  5. На форме Contact Administration Form нажмите Export Data to XML.

  6. В диалоговом окне Export Successful нажмите ОК.

  7. На форме Contact Administration Form нажмите Save and Close.

  8. В диалоговом окне на вопрос Are you sure? нажмите Nо.

  9. Закройте приложение Adventure Works Sales System.

  10. Закройте приложение SalesApplication, но оставьте Visual Studio 2005 открытым.

  • Создание нового приложения в Windows Forms для чтения данных в формате XML

  1. В меню File в пункте New выберите Project.

  2. В диалоговом окне New Project создайте новый проект со следующими свойствами:

  • Тип проекта: Выберете следующее Visual Basic или Visual C#, а затем кликните Windows.

  • Шаблон: Windows Application.

  • Имя: XmlReaderApplication.

  • Расположение: для приложения Visual C# установите E:\Labfiles\Starter\CS\, а для приложения Visual Basic установите E:\Labfiles\Starter\VB\

  • Создайте директорию для решений: убедитесь, что выбрано Create directory for solution.

  1. В диалоговом окне New Project нажмите ОК для создания проекта.

  • Установите свойства формы по умолчанию

  1. В обзоре решений кликните правой кнопкой мыши на Form1 и переименуйте:

  • MainForm.cs если Вы используете Visual C#.

  • MainForm.vb если Вы используете Visual Basic.

  1. В окне разработчика кликните по форме.

  2. В окне свойств установите следующие свойства формы:

  • Стиль границы формы: FixedDialog

  • Размер: 785; 363

  • Начальная позиция: центр монитора (CenterScreen)

  • Текст: главное окно приложения (Main Form)

  • Добавьте элемент управления DataGridView

  1. В настройках на вкладке Data перетащите управление DataGridView на форму Main Form

  2. Выделите элемент управления DataGridView и установите следующие свойства:

  • Имя: contactDataGridView

  • Расположение: 12, 12

  • Размер: 755, 314

  • Добавьте код для заполнения DataGridView данными XML

  1. В окне разработчика дважды щелкните по фону формы Main для создания обработчика события Load.

  2. В классе MainForm добавьте код, реализующий следующее:

  • Объявите закрытую (private) строковую константу CONTACTDETAILS_FILENAME:

      • Для Visual C# присвойте строке E:\Labfiles\Starter\CS\ContactDetails.xml

      • Для Visual Basic присвойте строке E:\Labfiles\Starter\VB\ContactDetails.xml

    • Создайте новый DataSet с именем contactDataSet.

  1. В обработчике событий MainForm_Load скопируйте и вставьте начальный код из L7.3 Ex1_starterText.txt:

    • Для Visual C# файл находится в папке E:\Labfiles\Starter\CS\

    • Для Visual Basic файл находится в папке E:\Labfiles\Starter\VB\

  1. В операторе try добавьте код, выполняющий следующее:

  • Вызов метода ReadXml объекта contactDataSet, получающего CONTACTDETAILS_FILENAME и XmlReadMode.Auto в качестве параметров. Это заполняет объект contactDataSet данными XML, сохраненными в файле.

  • Установку в свойство DataSource элемента управления contactDataGridView ссылки на первую таблицу объекта contactDataSet. Это заполняет элемент управления contactDataGridView данными, хранящимися в contactDataSet.

Ваш код должен выглядеть примерно так.

[Visual C#]

namespace XmlReaderApplication

{

public partial class MainForm : Form

{

private const string CONTACTDETAILS_FILENAME =

@"E:\Labfiles\Starter\CS\ContactDetails.xml";

DataSet contactDataSet = new DataSet();

public MainForm()

{

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]