Лекции рассматриваются новые технологии работы с данными: linq и ado. Net. На примере демонстрируется возможность ms sql




Дата канвертавання22.04.2016
Памер52.96 Kb.

Лекция 12. Использование MS SQL Server 2008 совместно с MS Visual Studio 2008



В лекции рассматриваются новые технологии работы с данными: LINQ и ADO.NET. На примере демонстрируется возможность MS SQL Server выполнять функции и использовать новые типы данных, созданные в MS Visual Studio для платформы .Net Framework.
Цель: познакомить с новыми возможностями в области работы с данными.

Создание функций для MS SQL Server
с использованием платформы .Net Framework

Данная возможность появилась еще в MS SQL Server 2005, когда стало можно подключать к MS SQL Server свои собственные сборки, созданные для платформы .Net Framework.

Благодаря этому пользователи получили возможность создавать в MS Visual Studio при помощи одного из языков программирования (C#, Visual Basic.Net и др.) объекты, которые впоследствии могут использоваться внутри MS SQL Server. Разрешается создание следующих объектов:


  • новые типы данных;

  • пользовательские функции;

  • хранимые процедуры;

  • агрегатные функции;

  • триггеры.

По умолчанию на MS SQL Server запрещено использование CLR (Common Language Runtime), поэтому требуется явно включить эту опцию на сервере.


Замечание. CLR – это общеязыковая исполняющая среда, которая входит в состав Microsoft .Net Framework и отвечает за выполнение любого кода, созданного для платформы .Net Framework.

C# – объектно-ориентированный язык, разработанный специально для платформы .Net Framework. Однако можно использовать и другие языки программирования для данной платформы.


Рассмотрим процесс создания обычной функции для MS SQL Server на языке C# в MS Visual Studio 2008.

  1. В MS Visual Studio 2008 создадим новый проект (меню FileNew – Project…)

  2. В диалоге создания проекта выберем нужный тип проекта и укажем имя (рис. 12.1).



Рис. 12.1. Создание нового проекта в MS Visual Studio 2008


  1. Далее можно указать сервер и базу данных, которые впоследствии можно будет использовать для отладки кода (см. рис. 12.2).


Рис. 12.2. Выбор сервера и базы данных


  1. В созданный проект добавим новый объект – пользовательскую функцию (см. рис. 12.3).



Рис. 12.3. Добавление функции в проект


  1. Напишем следующий код в этой функции:

using System;

using System.Data;

using System.Data.SqlClient;

using System.Data.SqlTypes;

using Microsoft.SqlServer.Server;


public partial class UserDefinedFunctions

{

[Microsoft.SqlServer.Server.SqlFunction]



public static SqlInt32 Sum(SqlInt32 a, SqlInt32 b)

{

return a + b;



}

};
Обратите внимание, что используются не обычные типы данных, которые есть в C#, а специфичные для MS SQL Server, такие типы имеют префикс «Sql»




  1. Зарегистрируем сборку на сервере MS SQL Server. Для этого выполним команду меню BuildDeploy Solution. При этом будет произведена компиляция сборки, а сама сборка будет помещена на сервер в указанную БД (см. п.3.).

  2. Разрешим выполнение CLR кода на сервере:

sp_configure 'clr enabled', 1

RECONFIGURE;


  1. После этого можно вызвать созданную функцию:

SELECT dbo.Sum(10, 20)


Аналогичным образом можно создать и агрегатную функцию. Например, агрегатная функция SUM в MS SQL Server работает только с числами, поэтому если возникает необходимость использовать такую функцию для строк (чтобы набор строк объединился в единую строку, а значения были бы разделены запятыми), то это можно реализовать средствами C#.

Технологии доступа к данным: LINQ и ADO.NET



Технология ADO.NET

ADO.NET представляет собой основную модель доступа к данным в платформе .Net Framework. Она не является расширением существовавшей ранее технологии ADO, а реализует новую модель работы с данными. Например, она предполагает отсоединенную модель работы, т.е. подключение с сервером баз данных устанавливается только на момент выполнения запроса, после чего оно разрывается. Ранее подключения с БД поддерживалось на протяжении всего сеанса работы.

ADO.NET включает следующие ключевые компоненты:


  • наборы данных (DataSet). Представляют собой некоторую часть реальной БД, включая в себя не только таблицы, но и связи между таблицами и ограничения;

  • провайдеры данных (DataProvider). Благодаря наличию различных провайдеров, технология ADO.NET может работать с различными типами СУБД: MS SQL Server, MS Access, Oracle, а также с любой БД, используя технологию ODBC (Open DataBase Connectivity).

Общая схема работы с использованием ADO.NET:




  1. Создать и установить подключение к серверу. Например, подключимся к локальному серверу к БД AdventureWorks:

string connectionString = “Data Source=(local);Initial

Catalog=AdventureWorks; Integrated Security=SSPI;”;

SqlConnection connection = new SqlConnection(connectionString);

connection.Open();


  1. Создать команду и выполнить на сервере. Например, получим все записи из таблицы Orders:

SqlCommand cmd = new SqlCommand(“SELECT * FROM Orders”, connection);

SqlDataReader reader = cmd.ExecuteReader();


  1. Обработать результаты выполнения команды. Например, выведем содержимое таблицы на консоль:

while (reader.Read())

{

Console.WriteLine(String.Format("{0}, {1}", reader[0], reader[1]));



}

reader.Close();




  1. Закрыть соединение:

conn.Close();


Технология LINQ

LINQ (Language Integrated Query) – проект Microsoft по добавлению синтаксиса языка запросов, напоминающего SQL, в языки программирования платформы .NET Framework.

LINQ позволяет выполнять запросы к объектам находящимся в памяти, в типизированной базе данных и в XML документе. Для этого используются соответствующие технологии: LINQ, DLINQ XLINQ.

Например, создадим массив arr и заполним его числами от 0 до 10, а затем при помощи LINQ выберем элементы большие 4 и меньшие 8:

int[] arr = { 7, 9, 3, 4, 5, 6, 0, 8, 9, 10 };

var newArray = from i in arr

where i > 4 && i < 8

select i;


В результате переменная newArray будет содержать коллекцию целых чисел: 7, 5, 6.

Перед началом работы LINQ с базами данных нам требуется получить описания объектов базы данных в MS Visual Studio. Существуют различные инструменты для генерации сущностей для MS Visual Studio из баз данных. Например, утилита командной строки SQLMetal, которую можно найти в папке: C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin.

Пример использования:
SQLMetal /server:.\SQL2008 /database:AdventureWorks /pluralize

/code:AdventureWorks.cs


В результате будут сгенерированы объекты на C#, описывающие все объекты БД AdventureWorks2008.

Рассмотрим применение LINQ на практике. Перед выполнением запросов LINQ к базам данных необходимо создать контекст данных:


var db = new MyDataContext(@"server=.\SQLEXPRESS; database=my;

integrated security=SSPI");

if (!db.DatabaseExists())

db.CreateDatabase();


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

  1. Выборка одного единственного значения:

var first = db.Customers.FirstOrDefault(c => c.CustID=="CHIPS");




  1. Выборка по условию:

where, null, contains & type

var r = new string[] { "WA", "OR" };

var customers = from c in db.Customers

where c is Customer &&

(c.Region==null || r.Contains(c.Region))

select c;



  1. Операция соединения таблиц:

var labels = (from c in db.Customers join o in db.Orders

on c.CustID equals o.CustID

select new { name = c.ContactName,

address = o.ShipAddress

}).Distinct();




  1. Выполнение агрегатных функций:

var totals = from c in db.Customers

group c by c.Country into g

select new Summary { Country = g.Key,

CustomerCount = g.Count(),

OrdCount = g.Sum(a=> a.Orders.Count)};




  1. Операция вставки новой записи:

var customer = new Customer() {

CustID = "CHIPS",

CompanyName = "Mr. Chips" };

db.Customers.InsertOnSubmit(customer);

db.SubmitChanges();


Краткие итоги. Рассмотрены новые технологии работы с данными: LINQ и ADO.NET. Продемонстрированы новые возможности MS SQL Server – исполнять функции и использовать новые типы данных, созданные в MS Visual Studio для платформы .Net Framework.




База данных защищена авторским правом ©shkola.of.by 2016
звярнуцца да адміністрацыі

    Галоўная старонка