Упражнение 3. Использование хранимых процедур



В данном упражнении рассматривается основной сценарий LINQ to SQL для получения доступа к данным, выполняя только хранимые процедуры. Этот метод часто используется администраторами баз данных для ограничения способов получения доступа к хранилищам данных.

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

Предварительное действие:

Для выполнения дальнейших действий требуется наличие файла кода C#, созданного из базы данных Northwind. Если такого файла нет, выполните команду SqlMetal со следующей командной строкой (перед выполнением команды отсоедините базу данных Northwind):

sqlmetal /code:"c:\SQL Server 2000 Sample Databases\northwind.cs" /language:csharp "c:\SQL Server 2000 Sample Databases\northwnd.mdf" /sprocs /functions /pluralize

1. Создайте новое WinForms-приложение (назовите его LINQsqlSproc).

2. Добавьте ссылку на сборку System.Data.Linq/

3. Добавьте файл northwind.cs в проект.

4. Создайте подключения к базе данных – введите следующий код в класс формы (может быть другой путь к файлу данных):

 Northwnd db = new Northwnd(@"c:\SQL Server 2000 Sample Databases\northwnd.mdf");

5. Перенесите две кнопки, два текстовых поля и две подписи с панели элементов на форму Form1.

6. Расположите элементы управления по своему усмотрению. При необходимости увеличьте размер формы, чтобы разместить все элементы управления.

7. Для первой подписи label1 установите значение свойства Текст значение Введите код заказа, для второй подписи label2 – Введите код клиента.

8. Для кнопок установите значение свойству Текст: Подробности заказа и История заказа.

9. Создайте обработчик события Click кнопки Подробности заказа и реализуйте следующую функциональность:

a. Объявите переменную для хранения содержимого textBox1 в качестве аргумента для хранимой процедуры:

 string param = textBox1.Text;

b. Объявите переменную для хранения результатов возвращаемых хранимой процедурой CustOrdersDetail:

var custquery = db.CustOrdersDetail(Convert.ToInt32(param));

c. Выполните хранимую процедуру и отобразите результаты:

string msg = "";

foreach (CustOrdersDetailResult custOrdersDetail in custquery)

{

msg = msg + custOrdersDetail.ProductName + "\n";

}

if (msg == "")

msg = "No results.";

MessageBox.Show(msg);

d. Очистите переменные для дальнейшего использования:

param = "";

textBox1.Text = "";

10. Создайте обработчик события Click кнопки История заказа и реализуйте функциональность подобную для кнопки Подробности заказа для хранимой процедуры CustOrderHist:

string param = textBox2.Text;

var custquery = db.CustOrderHist(param);

string msg = "";

foreach (CustOrderHistResult custOrdHist in custquery)

{

msg = msg + custOrdHist.ProductName + "\n";

}

MessageBox.Show(msg);

param = "";

textBox2.Text = "";

11. Запустите и протестируйте приложение:

a. В поле Введите код заказа введите 10249 и нажмите кнопку Подробности заказа. В окне сообщения будет отображен список продуктов, включенных в заказ 10249.

b. В поле Введите код клиента введите ALFKI и нажмите кнопку История заказа. Откроется окно сообщения, в котором отображается история заказа для клиента ALFKI.

c. В поле Введите код заказа введите 123 и нажмите кнопку Сведения о заказе. Откроется окно сообщения, в котором отображается текст "Нет результатов".

Упражнение 4. Автоматическое создание объектов отображения с помощью Объектно-реляционного конструктора

В этом упражнении применяется реляционный конструктор объектов (Object Relational Designer) для автоматического создания объектной модели из метаданных существующей базы.

1. Создайте новое WinForms-приложение (назовите его LINQsql_m).

2. На форму перенесите кнопку (свойству text укажите значение Десять лучших) и ListView.

3. Настройте ListView для дальнейшей работы: в свойстве Columns добавьте два столбца с заголовками (свойство text): Ten Most и UnitPrice, свойству View установите вид отображения Details.

4. Добавьте в проект класс – файл LINQ to SQL classes, назовите его DataClassesProc.dbml.

5. В окне Server Explorer разверните дерево базы данных Northwind и перетащите хранимую процедуру Ten Most Expensive Products. Эта хранимая процедура извлекает из таблицы Products 10 самых дорогих продуктов и их цены.

6. В обработчике события Click кнопки Десять лучших укажите следующий код:

       var db = new DataClassesProcDataContext();

       foreach (var r in db.Ten_Most_Expensive_Products())

       {

           ListViewItem item =

listView1.Items.Add(r.TenMostExpensiveProducts.ToString());

     item.SubItems.Add(r.UnitPrice.ToString());

       }

7. Обратите внимание, что входная точка в базу данных теперь создается конструктором класса DataClassesProcDataContext (в общем случае класс будет называться так: {имя файла отображения} DataContext), которому больше не нужно передавать параметром строку соединения в явном виде.

8. Запустите и протестируйте приложение. По клику кнопки 10 самых дорогих продуктов и их цены отобразятся в списке.

ADO.NET Entity Framework


Дата добавления: 2019-02-26; просмотров: 201; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!