Вы находитесь на странице: 1из 44

Создание Web-приложений с

использованием ASP.NET 2.0


и SQL Server 2005

Сергей Байдачный
Технический директор
ITG Ukraine, Beliron
Содержание
Введение в SQL Server 2005
Работа с XML в SQL Server 2005
SQL Server 2005 и встроенный CLR
Новые элементы по работе с данными в
ASP.NET
SQL Server 2005
Data
Transformatio
Analysis Services n Services Notification
Services

SQL Server 2005


Full-Text Relational Reporting
Search Database Services
Engine
.NET
CLR

Replication Service Broker

Native HTTP
Support
Для разработчиков
Расширения Transact-SQL
Встроенная поддержка XML
Работа с сообщениями
Родная поддержка HTTP
Notification Services
Интеграция с CLR
Reporting Services
SQL Management Objects
Утилиты разработчика
SQL Server Management Studio
Business Intelligence Development Studio
sqlcmd
Visual Studio Designer
SQL Server Management Studio
Business Intelligence Development Studio
SQL Server проекты в VS 2005
Проекты для создания управляемых объектов
Автоматически включают необходимые ссылки
sqlaccess.dll
System.Data.dll
Содержат все необходимые шаблоны
Stored procedure User-defined type
Trigger Aggregate
User-defined function

Простое развертывание и отладка


Разделенные таблицы
Распределение данных таблицы
Увеличивает производительность на
многопроцессорных системах
Более простое управление большими
таблицами
Обработка исключений
TRY…CATCH
CREATE – обработка
PROCEDURE dbo.AddData ошибок
@a int, @b int AS
SET XACT_ABORT ON
Код TRY
BEGIN "IF @@error" больше не нужен
Требует
BEGIN TRANXACT_ABORT ON
INSERT INTO dbo.DataTable VALUES (@a, @b)
@@error
COMMIT можно использовать в блоке catch
TRAN
END TRY
Используйте "RAISERROR … WITH
BEGIN CATCH TRAN_ABORT
TRAN_ABORT" для создания исключений
DECLARE @err int
SET @err = @@error --trap the error number
ROLLBACK TRAN
INSERT INTO dbo.ErrorLog VALUES (@a, @b,
@err,GETDATE())
END CATCH
GO
Расширение типов данных
Увеличение размера некоторых типов:
varchar(max)
nvarchar(max)
varbinary(max)
xml – хранение данных XML с
возможной схемой
Встроенная поддержка HTTP
Доступ из различных источников
Mainframe
Client

Java Client .NET Client


LAN
Безопасность

SQL Server Internet


Web
Serv
LAN er
Service Broker

Message
type Queu
e

Contrac Service program


t Service
SQL Management Object
Иерархия классов
Server
Databases
Database
Schemas
StoredProced
ures
Tables
Table
Columns
… Column
Views

Утилитные классы
Backup, Restore, Scripter, Transfer
Поддержка XML
Хранение XML в базе
Преимущества:
Единое хранилище данных
Работа с содержимым на уровне БД
Выбирайте наиболее подходящую
модель хранения данных

Функциональность:
XML индексы
XQuery – для возврата данных
XQuery – для модификации данных

Поддержка схем:
Typed XML: Проверка данных по схеме
Untyped XML: Отсутствие проверки
Не типизированные XML
Определение xml типа данных

Неявное преобразование

Явное преобразование

Явное конвертирование
CREATE TABLE Invoices
Правильное
(InvoiceID int, формирование XML
SalesDate datetime,
CustomerID int,
SET @itemDoc
ItemList xml) = =
SET @itemDoc
CONVERT(xml,'<Items>etc.')
SET
SET @itemDoc
@itemDoc== '<Items>etc.</Items>'
CAST('<Items>etc.</Items>') AS xml
ERROR!
CONVERT(xml,'<Items>etc.</Items>')
DECLARE @itemDoc xml
Управление XML схемами
Создание XML схем

Просмотр информации о схемах

Модификация

Удаление
CREATE
SELECT *XML SCHEMA COLLECTION cvSchemas
AS
FROM sys.xml_schema_collections
N'<?xml version="1.0" ?>
ALTER
DROP
SELECT XML
<xsd:schema
XML SCHEMA COLLECTION
targetNamespace=
* SCHEMA cvSchemas
...' cvSchemas
COLLECTION
FROM sys.xml_namespaces
Типизированные XML
Создание типизированной колонки

CREATE TABLE HumanResources.EmployeeResume


(EmployeeID int, Resume xml (cvSchemas))

Вставка XML (соответствие схеме)


INSERT INTO HumanResources.EmployeeResume
VALUES (1,
'<?xml version="1.0" ?>
<resume xmlns="http://cvSchemas">
...
</resume>')
Управление XML индексами
Создание основного XML индекса
CREATE PRIMARY XML INDEX xidx_Item
ON Sales.Invoices(ItemList)

Создание вторичного PATH XML индекса


CREATE XML INDEX xidx_ItemPath
ON Sales.Invoices(ItemList)
USING XML INDEX xidx_Item FOR PATH
• Создание вторичного PROPERTY XML
индекса
CREATE XML INDEX xidx_ItemProp
ON Sales.Invoices(ItemList)
USING XML INDEX xidx_Item FOR PROPERTY

Создание вторичного VALUE XML индекса


CREATE XML INDEX xidx_ItemVal
ON Sales.Invoices(ItemList)
USING XML INDEX xidx_Item FOR VALUE
Использование XQuery
Запросы

Значение

SELECT
Проверка xmlCol.query(
на существование
'<InvoiceNumbers>
{
Связывание с другими колонками
for $i in /InvoiceList/Invoice
return <InvoiceNo>
{number($i/@InvoiceNo)}
SELECT Invoices.query(
</InvoiceNo>
SELECT
SELECT xmlCol.exist(
xmlCol.value(
'<Store>
}
'/InvoiceList/Invoice[@InvoiceNo=1000]'
'(/InvoiceList/Invoice/@InvoiceNo)[1]',
{sql:column("StoreName")}
) </InvoiceNumbers>')
'int')
</Store>')
Модификация XML
Использование insert

Использование replace

Использование delete

SET xmlCol.modify(
@xmlDoc.modify(
SET @xmlDoc.modify(
'insert
replace element
value of
salesperson {"Bill"}
'delete
(/InvoiceList/Invoice/SalesPerson/text())[1]
as first
(/InvoiceList/Invoice/SalesPerson)[1]')
into (/InvoiceList/Invoice)[1]')
with "Ted"')
Использование FOR XML
Расширения Описание
Директива В RAW реж им е со здаю тся элем ент ы ,
ELEMENTS а н е ат риб уты XML
Ре зу льтат м ож ет вкл юч ат ь пуст ые
Поддержка NULL элемен ты дл я null значе ни й
Вы м оже те со здат ь в строе нн ую XSD
Inline XSD schemas схем у
TYPE directive
Ре зу льтат д ля FO R XM L запр оса
returns results as може т со дер жат ь xml value s
xml data type
PATH режим Вы м оже те и сп оль зо ват ь XP ath
ROOT директива По зв оляет зад ат ь ro ot элем ент
Именованные Имее тся возм ож но ст ь за дават ь
элементы им ена в RAW и PA TH реж им ах
Использование OPENXML
Расширения Описание
Процедура
Документы
sp_xml_preparedocument
могут содержать
разр ешае т xml
xml
пар ам етр ы
Коло нки типа xml могу т
Поддержка типа
возвр ащатьс я с
xml в WITH пом ощью WI TH
Блок – область Ун ичто жени е доку мен та
видимости в к онце блок а
Интеграция с CLR
SQL Server 2005 и CLR
Запуск кода в базе данных, используя
встроенные сборки
Создание управляемых процедур,
триггеров, функций, типов и агрегатов
Преимущества:
Расширение программной модели
Общее окружение для разработки
Производительность и расширяемость
Управляемый код vs. Transact-SQL

Использование управляемого кода для:


Процедур со сложной логикой
Доступа к .NET Framework библиотеке
Использование Transact-SQL для доступа к
данным в методах с простой логикой
Импорт сборок
1 Создайте объект БД для сборки

2 Свяжите объект со сборкой

3 Установите разрешения

CREATE
CREATE ASSEMBLY HelperLibrary
FROM
'\\Server1\Private\AProject\bin\HelperLibrary.
dll'
WITH
CREATE PERMISSION_SET SAFE -- default value
ASSEMBLY Contacts

CREATE ASSEMBLY Contacts


FROM 'C:\AProject\bin\Contacts.dll'
WITH PERMISSION_SET EXTERNAL_ACCESS
Использование сборок
Используйте соответствующее
1 Create выражение

2 Свяжите объект со сборкой

3 Используйте созданный объект

CREATE
CREATE PROCEDURE
Person.UpdatePhoneList
Person.UpdatePhoneList AS
EXTERNAL NAME Contacts.
Contacts.PhoneList.SaveList
PhoneList.SaveList
GO

EXEC Person.UpdatePhoneList
Использование VS.NET
Создание хранимой процедуры
1 Создайте открытый метод
Добавьте SqlProcedure атрибут для
2 развертывания
3 Создайте логику хранимой процедуры
public
public class
class ContactCode
ContactCode
{
{
[SqlProcedure(Name="GetContactNames")]
public
public static
static void
void GetContactNames()
GetContactNames()
{
{
SqlCommand cmd =
SqlContext.GetCommand();
cmd.CommandText = "SELECT FirstName + ' '
+ LastName" +
" AS [Name] FROM Person.Contact";
SqlDataReader rdr = cmd.ExecuteReader();
}
} SqlPipe sp = SqlContext.GetPipe();
}
} sp.Send(rdr);
}
}
Создание триггеров
1 Создайте открытый статический метод

2 Добавьте SqlTrigger атрибут

3 Создайте логику
public
public class
class ContactCode
ContactCode
{
{
[SqlTrigger(Name="ContactUpdTrg",
Target="Person.Contact", Event="FOR UPDATE")]
public
public static
static void
void ChangeEmail()
ChangeEmail()
{
{
SqlTriggerContext trg =
SqlContext.GetTriggerContext();
if (trg.TriggerAction == TriggerAction.Update)
{
if (trg.ColumnsUpdated[7] == true)
//send e-mail to each new contact
}
} }
}
} }
}
Создание функций
1 Создайте открытый статический метод

2 Добавьте SqlFunction атрибут

3 Реализуйте логику

public
publicclass
public classMyFunctions
class MyFunctions
MyFunctions
{
{{
[SqlFunction(Name="GetLongDate"
[SqlFunction(Name="GetLongDate")] )]
public
publicstatic
public staticSqlString
static SqlStringGetLongDate(SqlDateTime
SqlString GetLongDate(SqlDateTime
GetLongDate(SqlDateTime
DateVal)
DateVal)
DateVal)
{
{{
// Return the date as a long string
return DateVal.Value.ToLongDateString();

}
}}
}
}}
Создание агрегатов
1 Создайте открытый класс
Добавьте Serializable и
2 SqlUserDefinedAggregate атрибуты
Создайте Init, Accumulate, Merge и
3 Terminate методы
[Serializable, SqlUserDefinedAggregate(…)]
public class CommaDelimit
{
public void Init()
{…}
public void Accumulate(SqlString Value)
{…}
public void Merge(CommaDelimit Group)
{…}
public SqlString Terminate()
{…}
}
Создание типов
Создайте открытый класс или
1 структуру
Добавьте Serializable и
2 SqlUserDefinedType атрибуты

3 Обработайте NULL
Поддержка преобразования к
4 строкам
Предоставьте открытые свойства
5 для доступа к закрытым данным
Развертывание объектов
1 Используйте атрибуты

[SqlProcedure(Name="ProcName")] public
static void Proc ( )

2 Используйте Deploy меню


ADO.NET 2.0
Новые возможности SQL Server 2005
Asynchronous data access

Multiple active result sets (MARS)

Bulk copy operations

Batch updates

Notifications

Snapshot isolation mode

Support for SQL Server 2005 data types


ASP.NET 2.0
DataSource – еще меньше кода

Новые элементы управления


Задавайте параметры в описании
Используйте конфигурационный файл
<asp:SqlDataSource ID="SqlDataSource1" Runat="server"
SelectCommand="SELECT * FROM [tblUsers]"
ConnectionString=
"<%$ ConnectionStrings:AppConnectionString1 %>">
</asp:SqlDataSource>
GridView
Замена DataGrid
Использует источники данных
Улучшенная сортировка и разбиение на
страницы
DetailView
Информация о текущей записи
Data Connections
Вопросы

sbaidachni@itgny.com
© 2004 Microsoft Corporation. All rights reserved.
This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.