[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
Для компиляции приложения Adventure Works Sales System в меню Build кликните Build Solution.
Запустите приложение Adventure Works Sales System в меню Debug кликните Start Debugging
В форме Main Form кликните Sales Administration, чтобы открыть форму Sales Administration Form
Протестируйте Sales Administration Form, проверьте что общее количество отображенных продаж составляет 31465.
Закройте форму Sales Administration Form
В форме Main Form нажмите Product Administration.
В форме Product Administration Form, в блоке Enter a price, введите 405.75 и затем нажмите Update All Products Prices.
В диалоговом окне Update Result, проверьте что число обновленных строк 504, а затем нажмите OK.
Закройте форму Product Administration Form.
Закройте приложение 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
Откройте файл SalesApplication.sln, если он ещё не открыт, находящийся в папке E:\Labfiles\Starter\CS\SalesApplication или E:\Labfiles\Starter\VB\SalesApplication.
В обзоре решений правой кнопкой мыши кликните contactAdministrationForm и потом нажмите View Code.
В классе contactAdministrationForm определите местоположение комментария TODO: [L7.3 Ex1] Create file location constant. Ниже этого комментария, объявите строковую постоянную с именем CONTACTDETAILS_FILENAME и присвойте ей значение "E:\Labfiles\Starter\CS\ContactDetails.xml".
В обработчике событий exportButton_Click определите местоположение комментария TODO: [L7.3 Ex1] Export data. Ниже комментария добавьте код для записи contactDataSet как XML в файл, путь к которому определен в переменной CONTACTDETAILS_FILENAME. Настройте XmlWriteMode в режим IgnoreSchema.
В обработчике событий exportButton_Click добавьте код для отображения MessageBox со следующими свойствами:
Сообщение Your data has been exported to: следует переменная CONTACTDETAILS_FILENAME.
Заголовок 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
В меню File нажмите Save All.
Для компиляции приложения Adventure Works Sales System в меню Build нажмите Build Solution.
Для запуска приложения Adventure Works Sales System в меню Debug нажмите Start Debugging.
На форме главного окна приложения нажмите Contact Administration для открытия формы Contact Administration Form.
На форме Contact Administration Form нажмите Export Data to XML.
В диалоговом окне Export Successful нажмите ОК.
На форме Contact Administration Form нажмите Save and Close.
В диалоговом окне на вопрос Are you sure? нажмите Nо.
Закройте приложение Adventure Works Sales System.
Закройте приложение SalesApplication, но оставьте Visual Studio 2005 открытым.
Создание нового приложения в Windows Forms для чтения данных в формате XML
В меню File в пункте New выберите Project.
В диалоговом окне 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.
В диалоговом окне New Project нажмите ОК для создания проекта.
Установите свойства формы по умолчанию
В обзоре решений кликните правой кнопкой мыши на Form1 и переименуйте:
MainForm.cs если Вы используете Visual C#.
MainForm.vb если Вы используете Visual Basic.
В окне разработчика кликните по форме.
В окне свойств установите следующие свойства формы:
Стиль границы формы: FixedDialog
Размер: 785; 363
Начальная позиция: центр монитора (CenterScreen)
Текст: главное окно приложения (Main Form)
Добавьте элемент управления DataGridView
В настройках на вкладке Data перетащите управление DataGridView на форму Main Form
Выделите элемент управления DataGridView и установите следующие свойства:
Имя: contactDataGridView
Расположение: 12, 12
Размер: 755, 314
Добавьте код для заполнения DataGridView данными XML
В окне разработчика дважды щелкните по фону формы Main для создания обработчика события Load.
В классе MainForm добавьте код, реализующий следующее:
Объявите закрытую (private) строковую константу CONTACTDETAILS_FILENAME:
Для Visual C# присвойте строке E:\Labfiles\Starter\CS\ContactDetails.xml
Для Visual Basic присвойте строке E:\Labfiles\Starter\VB\ContactDetails.xml
Создайте новый DataSet с именем contactDataSet.
В обработчике событий MainForm_Load скопируйте и вставьте начальный код из L7.3 Ex1_starterText.txt:
Для Visual C# файл находится в папке E:\Labfiles\Starter\CS\
Для Visual Basic файл находится в папке E:\Labfiles\Starter\VB\
В операторе 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()
{