Показаны сообщения с ярлыком SQL. Показать все сообщения
Показаны сообщения с ярлыком SQL. Показать все сообщения

вторник, 28 июня 2011 г.

Разработка бизнес приложения на silverlight –Часть 1(создание базы данных, silverlight приложения и Edmx файла)

В этой статье мы с вами рассмотрим что такое ria services и напишем простенькую Программку на сильверлайт с использованием dataform и datagrid. Итак, приступим.
Суть задачи вот в чем: есть некий объект в базе, допустим - здание (строение - некая коммерческая недвижимость), у него есть набор полей - адрес, название здания (например, бизнес-центры зачастую имеют название), этажность, общая площадь, общее кол-во помещений, мин.арендная ставка, макс.арендная ставка, дата постройки, кол-во арендаторов и т.п. .(если хотите, можете еще добавить полей :)) Также, у здания можно посмотреть (и конечно же редактировать тоже) данные по каждому этажу - площадь этажа, номер этажа, кол-во арендаторов и т.п. Все данные надо уметь редактировать и добавлять-удалять, DataGrid для редактирования данных не использовать.
Что можно и нужно использовать (точнее, что бы использовала я, и что я рекомендую использовать) - SQL Express в качестве, Entity Framework (LINQ2SQL по желанию) для сохранения данных из вэб-сервиса, WCF RIA для передачи данных между Базой и Silverlight приложением, DataForm для редактирования данных на стороне клиента (кстати замечательная вещь - просто "скармливаете" ваш объект форме и она сама строит все поля и подписи к ним). Также, почитайте про DataAnnotation - какие есть аттрибуты у этой технологии, используемые совместно с WCF RIA. На первый взгляд достаточно сложно, особенно для новичка, но эти технологии реально упрощают построение бизнес приложений с помощью Silverlight 4.0.
С заданием определились, начинаем делать.
Сначала создаём базу данных. У нас будет две таблицы Building и Floor.
CREATE TABLE [dbo].[Building](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Address] [nvarchar](500) NOT NULL,
[Name] [nchar](200) NOT NULL,
[FloorCount] [int] NULL,
[TotalArea] [int] NULL,
[Room] [int] NULL,
[MinRentalRate] [int] NULL,
[MaxRentalRate] [int] NULL,
[CreationDate] [datetime] NULL,
[TenantsCount] [int] NULL,
CONSTRAINT [PK_Building] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Floor](
[BuildingID] [int] NOT NULL,
[Number] [int] NOT NULL,
[Area] [int] NULL,
[TenantsCount] [int] NULL,
CONSTRAINT [PK_Floor] PRIMARY KEY CLUSTERED
(
[BuildingID] ASC,
[Number] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Теперь нам необходимо создать сильверлайт проект в Visual Studio.
Microsoft Silverlight является реализацией .NET Framework, поддерживаемой различными браузерами и платформами, предназначенная для создания и представления мультимедиа и многофункциональных приложений (RIA) нового поколения в Интернете. Silverlight объединяет возможности сервера, Интернета и персонального компьютера; возможности управляемого кода и динамических языков, декларативного и традиционного программирования, а также мощные средства Windows Presentation Foundation (WPF).
Для запуска приложения Silverlight пользователям необходим небольшой подключаемый модуль для браузера. Подключаемый модуль предоставляется бесплатно. Если у пользователя еще не установлен подключаемый модуль, ему автоматически предлагается установить его. Загрузка и установка занимают всего несколько секунд и не требуют от пользователя никаких действий, кроме разрешения на установку.
Silverlight гарантирует, что пользователи могут запускать приложения во всех современных браузерах без создания специального кода для браузера. Приложения Silverlight могут выполняться в браузере или вне браузера.
Давайте создадим новый проект.
· Запустите Visual Studio 2010.
· В меню Файл последовательно выберите пункты Создать и Проект.
Откроется диалоговое окно Создать проект.
· В области Установленные шаблоны разверните узел Visual C# или Visual Basic и выберите Silverlight.
· В списке шаблонов выберите шаблон Приложение Silverlight. На следующем рисунке приведен пример шаблонов проектов Silverlight.
image
· Введите имя и расположение приложения и нажмите кнопку ОК.
· Открывается диалоговое окно Создать приложение Silverlight, как показано на следующем рисунке.
image
· Выберите метод для размещения приложения Silverlight.
o Если вы не хотите использовать веб-сайт для размещения приложения Silverlight, снимите флажок Размещение приложения Silverlight на новом веб-сайте. Вместо этого будет создана тестовая страница HTML для размещения данного приложения.
o Установите флажок Размещение приложения Silverlight на новом веб-сайте, если требуется добавить к решению для размещения приложения Silverlight отдельный веб-сайт ASP.NET или проект веб-приложения ASP.NET. При выборе этого параметра необходимо также указать Имя нового веб-проекта и Тип нового веб-проекта.
· Из раскрывающегося списка Версия Silverlight выберите нужную версию Silverlight.
· Нажмите кнопку ОК.
· Для построения проекта приложения Silverlight в меню Построение выберите команду Построить решение.
· Для отладки проекта приложения Silverlight в меню Отладка выберите команду Начать отладку.
· Для запуска проекта приложения Silverlight в меню Отладка выберите команду Начать без отладки.
Я выбрала в размещение приложения Silverlight на новом веб-сайте и Visual Studio сгенерировала мне два проекта: один asp.Net проект, второй Silverlight. Вот что получилось.
clip_image005
Рассмотрим что за файлы cгенерила нам Visual Studio.
Проект приложения Silverlight содержит следующую конфигурацию, ссылки на сборки и файлы кода:
· AppManifest.xml – это файл манифеста приложения, необходимый для создания пакета приложения. Изменение этого файла не допускается.
· AssemblyInfo.cs - этот файл содержит имя и метаданные версии, которые внедрены в созданную сборку.
· XAP-файл - это пакет приложения Silverlight. Пакет создается, когда выполняется построение проекта приложения Silverlight. Пакет приложения — это сжатый ZIP-файл с расширением XAP-файла, содержащий все файлы, необходимые для запуска данного приложения.
· Файлы MainPage - класс MainPage используется для создания пользовательского интерфейса к приложению Silverlight.
· Файлы приложения - Класс App является обязательным для приложения Silverlight для отображения интерфейса пользовательского приложения. Класс App реализуется с помощью App.xaml и App.xaml.cs. Для класса App создается экземпляр с помощью подключаемого модуля Silverlight после создания пакета приложения (XAP-файл).
· Тестовая страница - отдельная страница HTML (TestPage.html) создается для размещения приложения, если не установлен флажок Размещение приложения Silverlight на новом веб-сайте в диалоговом окне Создание приложения Silverlight.
При установке флажка Размещение приложения Silverlight на новом веб-сайте в диалоговом окне Создание приложения Silverlight создается веб-сайт ASP.NET и добавляется к решению Silverlight. Веб-сайт содержит следующие файлы:
· Silverlight.js - вспомогательный файл JavaScript, содержащий функции для инициализации экземпляров подключаемого модуля Silverlight и функции для определения установленной версии клиента подключаемого модуля.
· HTML-файл - файл HTML, используемый для настройки и создания экземпляра подключаемого модуля Silverlight, который загружает и запускает приложение Silverlight.
· ASPX-файл - ASPX-файл, являющийся веб-страницей запуска по умолчанию. Имя этого файла — это объединение имени проекта приложения Silverlight и текста "TestPage.aspx".
· Файл Web.config - файл конфигурации веб-сайтов
Далее переходим к уровню бизнесс логики. Мы будем в своей программе использовать Entity Framework. Entity Framework (EF) — это объектно-ориентированная технология доступа к данным, является object-relational mapping (ORM) решением для .NET Framework от Microsoft. Предоставляет возможность взаимодействия с объектами как посредством LINQ в виде LINQ to Entities, так и с использованием Entity SQL.
Для начала нам необходимо в приложении создать edmx файл. EDMX-файл — это XML файл, определяющий концептуальную модель, режим хранения и их сопоставление. Кроме того, EDMX-файл содержит сведения, используемые конструктором моделей EDM ADO.NET (конструктор сущностей) для подготовки модели к просмотру в графическом режиме. Рекомендуется производить создание EDMX-файла с помощью мастера моделей EDM.
Создаём EDMX-файл из существующей базы данных:
· Откройте или создайте проект, для которого нужно создать EDMX-файл.
· Щелкните правой кнопкой мыши имя проекта в обозревателе решений, укажите пункт Добавить и выберите пункт Создать элемент.
· Выберите в области Шаблоны пункт Модель ADO.NET EDM.
· Введите имя файла (<имя_проекта>.edmx), а затем нажмите кнопку Добавить.
· Откроется первая страница программы Мастер моделей EDM.
· В диалоговом окне Выбор содержимого модели выберите Создать из базы данных, а затем нажмите кнопку Далее.
· Нажмите кнопку Создать соединение.
· Появится диалоговое окно Свойства соединения.
· Введите имя сервера, выберите метод проверки подлинности и введите имя базы данных, для которой была создана модель. Нажмите кнопку ОК.
· В диалоговом окне Выбор подключения к данным обновятся настройки подключения к базе данных.
Примечание: По умолчанию настройки соединения сущности сохраняются в файле App.config или Web.config file (в зависимости от типа проекта). Введите имя соединения или используйте имя, заданное по умолчанию. Снимите флажок Сохранить параметры соединения сущности, если не нужно сохранять сведения о соединении в файле конфигурации.
· Чтобы продолжить работу, нажмите кнопку Далее.
· Появится диалоговое окно Выбор объектов базы данных. По умолчанию объекты в базе данных не выбираются для включения в EDMX-файл.
· Разверните узлы для таблиц, представлений и хранимых процедур. Отмените выделение любых таблиц, представлений и хранимых процедур, которые не нужно включать в EDMX-файл.
Примечание: Классы, сформированные из концептуальной модели, будут находиться в области Пространство имен модели. Введите имя пространства имен или используйте имя, установленное по умолчанию.
· Чтобы создать EDMX-файл, нажмите кнопку Готово.
Мастер моделей EDM выполняет следующие действия.
· Добавляет в проект ссылки на сборки System.Data, System.Data.Entity, System.Core, System.Security и System.Runtime.Serialization, если они еще не существуют.
· Создает EDMX-файл, который инкапсулирует модель хранения, концептуальную модель и сопоставления.
· Создает файл с исходным кодом, содержащий классы, сформированные из концептуальной модели. Файл с исходным кодом можно просмотреть, развернув узел EDMX в окне Обозреватель решений.
Примечание: Файл с исходным кодом формируется из EDMX-файла. Любые изменения, внесенные вручную в файл с исходным кодом, перезаписываются при изменении соответствующего EDMX-файла. Чтобы избежать перезаписи пользовательского кода, можно разработать разделяемые классы, хранимые в отдельных файлах.
· Создает файл App.Config или Web.Config (в зависимости от типа проекта).
· Для проектов веб-узлов ASP.NET определяет поставщик компоновки в файле Web.config.
· Отображает концептуальную модель в конструкторе моделей EDM ADO.NET (конструктор сущностей).
Вот то что у меня получилось.
clip_image006
Как вы уже поняли мы разрабатываем сегодня бизнес приложение. А что приходит в голову при рассмотрении бизнес-приложений? На первом месте стоят данные. Приложения Silverlight выполняются на стороне клиента в обозревателе. Однако данные находятся в базе данных на стороне сервера. Если посмотреть на пространства имен и сборки Silverlight, в них отсутствует поддержка ADO.NET, поэтому платформа не поддерживает такие хорошо известные функции, как DataReaders или LINQ-To-SQL.
Кроме того, в Silverlight отсутствует база данных на стороне клиента. Во многих случаях это не решило бы проблему. Вы, конечно же, не захотите случайно сохранить временную копию базы данных с конфиденциальной информацией на клиентском компьютере.
Решение просто: добавление к базе данных уровня службы. Этот уровень службы можно использовать для подключения к базе данных, желательно через бизнес-уровень. На стороне клиенте Silverlight может подключаться к этим службам и получать доступ к данным.clip_image007
Silverlight поддерживает типы служб ASMX, WCF и REST. Также можно использовать Silverlight для использования более экзотических служб, таких как сокеты и net.tcp. Это хорошая новость, если вы добавляете Silverlight к существующим технологиям предприятия. Службы, от которых Silverlight может получать данные, – это те же самые службы, которые можно использовать для других типов приложений.
Работа со службами ASMX и WCF аналогична с точки зрения Silverlight. При реализации службы выбором по умолчанию должна быть WCF.
Далее нам необходимо создать WCF RIA сервисы в нашем приложении, которые будут проводниками между базой данных и Silverlight приложением. Что же такое RIA сервисы и как их создать мы рассморим в следующей статье.

среда, 13 января 2010 г.

10 базовых вопросов по MS SQL Server

1. Какой командой (short cut) можно вызвать помощь HELP по синтаксису оператора SQL в Query Analyzer?

Выделить оператор и нажать Shift+F1

2. Как в Query Analyzer в открытом файле скрипта выполнить только часть последовательных команд?

Выделить нужные команды и нажать F5 или кнопку кнопку Execute Query.

3. После написания процедуры выяснилось, что она работает неправильно. Какие есть средства для устранения ошибок в работе процедуры?

Для обработки ошибок, возникающих во время исполнения процедур, используются коды возврата и функция @@ERROR.

1).Обработка пользовательских ошибок.

С помошью оператора RETURN можно вернуть значения для обработки ошибок.

Пример:

ALTER PROCEDURE exampleProc

AS

.....

IF(....проверка на возможность ошибки...)

RETURN(1)

ELSE

.....выполняем действия хранимой процедуры...

При вызове процедуры:

-- Добавляем переменную для хранения результирующего кода

DECLARE @r_code int

-- Запускаем процедуру и устанавливаем @r_code равной результату процедуры

EXECUTE @r_code = exampleProc

--Определяем значение @r_code и исполняем программу

IF @r_code = 0

.....

ELSE IF @r_code = 1

PRINT 'Ошибка номер ' + CONVERT(varchar(1),@r_code)

GO

2).Ошибки базы данных

При возникновении ошибки функция @@ERROR возвращает номер ошибки отличный от нуля.

Номера и описания ошибок хранятся в таблице master.dbo.sysmessages.

4. Что такое уровень изоляции транзакций и в каких случаях его надо регулировать для SQL Server?

Уровень, на котором транзакция готова к приёму несогласованных данных, называется уровнем изоляции. Уровень изоляции определяет степень изоляции одной транзакции

от остальных. Более низкий уровень изоляции увеличивает возможность параллельного

выполнения, но за это приходится расплачиваться согласованностью данных. Напротив,

более высокий уровень изоляции гарантирует согласованность данных, но при этом стра-

дает параллельное выполнение.

SQL Server поддерживает все четыре уровня изоляции:

READ UNCOMMITED – незавершенное чтение, или допустимо черновое чтение. По сути, для транзакции не устанавливается никакой блокировки, которая гарантировала бы целостность данных.

READ COMMITTED – завершенное чтение, при котором отсутствует черновое, "грязное" чтение.

Тем не менее в процессе работы одной транзакции другая может быть успешно завершена и сделанные ею изменения зафиксированы.

REPEATABLE READ – повторяющееся чтение. Повторное чтение строки возвратит первоначально считанные данные, несмотря на любые обновления, произведенные другими пользователями до завершения транзакции.

SERIALIZABLE – сериализуемость. Чтение запрещено до завершения транзакции.

5. Что такое нормализация базы данных? Для чего это нужно и есть ли какие качественные характеристки нормализации?

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

6. В T-SQL есть возможность написания запроса по результатам другого запроса, который упоминается в конструкции FROM. Продемонстрировать как это можно сделать. Для демонстрации использовать таблицу из базы Northwind.

Из всех продуктов выбираем названия напитков(ID=1) поставщика Exotic Liquids(ID=1) .

SELECT Beverages.ProductName

FROM (SELECT ProductName,SupplierID FROM Products

WHERE CategoryID=1) as Beverages

WHERE Beverages.SupplierID = 1;

7.1 Написать запрос при помощи оператора SELECT, который блокирует таблицу на чтение.
Для демонстрации этого использовать таблицу из базы Northwind. Применить в нем оператор WAITFOR для того, чтобы транзакция с этим запросом продолжалась назначенное время. Проверить, что блокировки действительно существуют при помощи другого запроса SELECT по той же таблице. Показать, что возникшая блокировка может быть обнаружена с помощью визуальных средств, предоставляемых SQL Server. Прислать скриншот это view, который показывает наличие проблем с блокировками.

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

BEGIN TRAN

SELECT * FROM Categories WITH (TABLOCKX)

WAITFOR DELAY '00:00:10'

COMMIT TRAN

Для обнаружения блокировок на уровне таблицы можно использовать программу SQL Server Profiler, системные хранимые процедуры sp_lock и sp_who, а также окно Current Activity программы SQL Server Enterprise Manager.

lock1

7.2 Написать второй запрос - SELECT по той же таблице, но чтобы он работал в любом случае - не ждал окончания блокировки всей таблицы.

SELECT * FROM Categories WITH (NOLOCK)

8. Работа с utility Profiler - показать как можно отследить все запросы только к определенной базе. Для проверки использовать запросы к базе Northwind.

SQL Profiler ->File-> New Trace -> вкладка Events-> добавить TSQL->вкладка Filters-> раскрыть узел DatabaseName-> выбрать Like-> вписать Northwind->Run

9. Как организовать в БД поддержку отношения логических связей объектов многие ко многим на уровне таблиц БД?

Такая связь создаётся путём определения третьей таблицы, первичный ключ которой состоит из внешних ключей основных двух таблиц.

10. В Query Analyzer есть возможность создавать объекты БД (функции, процедуры, таблицы и т.д.) при помощи шаблонов. Можно кратко описать как это можно сделать?

В Object Browser выбрать вкладку Templates .

Выбрать необходимый шаблон, он откроется в новом окне.

В меню Edit выбрать Replace Template Parameters.

Установить нужные значения параметров.

Нажать Replace All.

Нажать кнопку Execute Query.