2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL.

Slides:



Advertisements
Similar presentations
NEXGIS Technologies Ltd.
Advertisements

C# and LINQ Yuan Yu Microsoft Research Silicon Valley.
Damien Guard (BSc, MBCS) Guernsey Software Developer Forum Language Integrated Query:
Chapter 10 ADO. What is ADO? ADO is a Microsoft technology ADO stands for ActiveX Data Objects ADO is a programming interface to access data in a database.
The Data Layer Database Design.
ASP.NET Programming with C# and SQL Server First Edition Chapter 8 Manipulating SQL Server Databases with ASP.NET.
Chapter 12 Database Connectivity with ASP.NET JavaScript, Third Edition.
Objective In this session we will discuss about : What is ADO. NET ?
Overview of Database Access in.Net Josh Bowen CIS 764-FS2008.
Accessing SQL Server and MySQL – Live Demo Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical Training
C# programming with database Basic guideline. First step Install SQL Server 2008/2010 (Professional edition if possible) Install Visual Studio 2008/2010.
 Introduction  What is LINQ  Syntax  How to Query  Example Program.
LINQ, An IntroLINQ, An Intro Florin−Tudor Cristea, Microsoft Student Partner.
Oracle External Procedure Calls Теодор Иванов Софтуерен инженер.
xman892.blogspot.com xman892.blogspot.com Руслан Трифонов Omegasoft Ltd xman892.blogspot.com.
2014 Copyright © 2014 DAVID Holding Company Курс по уеб програмиране Занятие №2 CSS.
Разширеното разбиране за интерфейси (вкл. в.NET) * Когато не искаме да реализираме наследство на типове, но общ договор за поведение. * CLR поддържа единично.
ADO.NET A2 Teacher Up skilling LECTURE 3. What’s to come today? ADO.NET What is ADO.NET? ADO.NET Objects SqlConnection SqlCommand SqlDataReader DataSet.
1 ASP.NET ASP.NET Rina Zviel-Girshin Lecture 4. 2 Overview Data Binding Data Providers Data Connection Data Manipulations.
Accessing SQL Server and OLE DB from.NET Svetlin Nakov Telerik Corporation
Java 2 Micro Edition Разработване на приложения за мобилни телефони Пламен Желязов Eternity Logic.
ADO.Net CS795. What is ADO.Net? Database language spoken by managed applications ADO.net database accesses go through modules: data providers –SQL Server.Net.
.NET Data Access and Manipulation ADO.NET. Overview What is ADO.NET? Disconnected vs. connected data access models ADO.NET Architecture ADO.NET Core Objects.
1 Introduction to ADO.NET Microsoft ADO.NET 2.0 Step by Step Rebecca M Riordan Microsoft Press, 2006.
LINQ: It’s Not Your Father’s Data Access Denny Boynton Anheuser-Busch Companies.
The.NET Language Integrated Query Project Anders Hejlsberg TLN306 Technical Fellow Microsoft Corporation.
Database, SQL, and ADO.NET- Part 1 Session 11 Mata kuliah: M0874 – Programming II Tahun: 2010.
 Language Integrated Query  Make query a part of the language  Component of.NET Framework 3.5  Shipped with Visual Studio 2008.
Copyright ©2004 Virtusa Corporation | CONFIDENTIAL ADO.Net Basics Ruwan Wijesinghe Trainer.
Module 7: Accessing Data by Using ADO.NET
Telerik Software Academy Databases.
© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/3 Introduction to ADO.NET ADO.NET - Lesson 01  Training time: 10 minutes  Author:
An Introduction to ADO.Net Marmagna Desai.NET Seminar, Fall-2003.
ADO.NET connections1 Connecting to SQL Server and Oracle.
1 11/10/05CS360 Windows Programming ADO.NET. 2 11/10/05CS360 Windows Programming ADO.NET  Behind every great application is a database manager o Amazon.
Accessing SQL Server and MySQL from.NET and C# Learning & Development Team Telerik Software Academy.
ADO.Net CS795. What is ADO.Net? Database language spoken by managed applications ADO.net database accesses go through modules: data providers –SQL Server.Net.
Linq Overview Vincent GERMAIN. Evolution - Rappel Langage  C# 2.0  C# 3.0 (Local type inference, Lambda expression, Method extension,Anonymous type)
Damien Guard (BSc, MBCS) Guernsey Software Developer Forum Language Integrated Query:
NHibernate что, где, когда Артур Дробинский ЗетаСофт Томск, 2012.
LINQ and Lambda Expressions Telerik Software Academy LINQ Overview.
Querying Information in a Database. CONTENTS Relational Database Systems Creating Database with SQL Server Reading Data with LINQ Requirements to Get.
ADO .NET from. ADO .NET from “ADO .Net” Evolution/History of ADO.NET MICROSOFT .NET “ADO .Net” Evolution/History of ADO.NET History: Most applications.
Thank you to our AWESOME sponsors!
.NET Data Access and Manipulation
 ADO.NET is an object-oriented set of libraries that allows you to interact with data sources  Commonly, the data source is a database, but it could.
Functional Programming
ASP.NET Programming with C# and SQL Server First Edition
Data Access with ADO.NET
DB Apps Introduction Intro to ADO.NET SQL SoftUni Team DB Apps Intro
Introduction to Entity Framework
Intro to LINQ Part 2 – Concepts and LINQ to Objects
Language Integrated Query: (LINQ) An introduction
Overview of Data Access
Overview of Data Access
Buổi 7 Mô hình CSDL Entity Framework code first
מתחברים למסד נתונים היכרות עם ADO.Net.
Изготвил: Севделина Младенова
КОМПЮТЪР = АПАРАТУРА + ПРОГРАМНО ОСИГУРЯВАНЕ
Относително и абсолютно адресиране
Компютърни мрежи – преговор с допълнение
N:\DOC\4M\lekcii\3_5Бази от данни.ppt
Б.Шишеджиев - Проектиране
Образци за възлагане на обществени поръчки в сила от / 01
ON-LINE УСЛУГИ ИЗВЪРШВАНИ ОТ ОБЛАСТНА АДМИНИСТРАЦИЯ
Изход от конзолата.
Chapter 10 ADO.
Технологии доступа к данным на платформе Microsoft.NET
M S COLLEGE OF ART’S, COMM., SCI. & BMS Advance Web Programming
LINQ to SQL Part 3.
Presentation transcript:

2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding Company Съдържание 1/1 ADO.NET SQL Injection атаки LINQ LINQ to SQL

Copyright © 2013 DAVID Holding Company ADO.NET Какво е „ADO.NET“? – Част от.NET Framework – Наследник на ActiveX Data Objects (ADO) – Предоставя удобни начини за достъп до бази данни – Минимална зависимост от избора на СУБД

Copyright © 2013 DAVID Holding Company ADO.NET ADO.NET доставчици (data providers) – Data Provider for SQL Server – Data Provider for OLE DB – Data Provider for ODBC – Data Provider for Oracle – Data Provider for SQL Server Compact 4.0

Copyright © 2013 DAVID Holding Company ADO.NET Модели за достъп до данните в ADO.NET – Свързан модел – Несвързан модел – LINQ to SQL – Entity Framework

Copyright © 2013 DAVID Holding Company ADO.NET Низове за връзка (connection strings) – Служат за осъществяване на връзката с базата данни – Представляват поредица от двойки „параметър=стойност“, разделени с ; – Различните доставчици поддържат различни параметри Server=(local); Database=HealthyFood; Integrated Security=SSPI Server=(local); Database=HealthyFood; Integrated Security=False; User ID=sa; Password=$secret$; Persist Security Info=False

Copyright © 2013 DAVID Holding Company ADO.NET Основни параметри на низовете за връзка – Server – Database – Integrated Security – User ID – Password – Persist Security Info

Copyright © 2013 DAVID Holding Company ADO.NET Автоматично генериране на низове за връзка – Използва се класът SqlConnectionStringBuilder – Параметрите на връзката са свойства на обекта

Copyright © 2013 DAVID Holding Company ADO.NET Съхраняване на низове за връзка в конфигурационен файл – Позволява промяна без прекомпилиране на приложението – Записва се в секцията – Достъпва се през статичното свойство ConfigurationManager.ConnectionStrings

Copyright © 2013 DAVID Holding Company ADO.NET Съхраняване на низове за връзка в конфигурационен файл connection.ConnectionString = ConfigurationManager.ConnectionStrings["connection"].ConnectionString;

Copyright © 2013 DAVID Holding Company ADO.NET Класът SqlConnection – Осъществява връзката с базата данни – Получава connection string – Методът Open() – Имплементира IDisposable using (var connection = new SqlConnection()) { connection.ConnectionString = ConfigurationManager.ConnectionStrings["connection"].ConnectionString; connection.Open(); // операции върху базата... }

Copyright © 2013 DAVID Holding Company ADO.NET Класът SqlCommand – Служи за изпълнение на заявки – Получава отворен SqlConnection – Методите ExecuteNonQuery(), ExecuteScalar(), ExecuteReader() – Имплементира IDisposable using (SqlCommand command = connection.CreateCommand()) { command.CommandText = "SELECT COUNT(*) FROM [Producers]"; int producerCount = (int)command.ExecuteScalar(); Console.WriteLine("Producers count: {0}", producerCount); }

Copyright © 2013 DAVID Holding Company ADO.NET Класът SqlCommand – методът ExecuteReader() using (SqlCommand command = connection.CreateCommand()) { command.CommandText = "SELECT [ProducerID], [Name] FROM [Producers]"; using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine("ProducerID: {0}; Name: {1}", reader["ProducerID"], reader["Name"]); } } }

Copyright © 2013 DAVID Holding Company ADO.NET Класът SqlCommand – параметри – Служат за динамично предаване на стойности – Име, тип и стойност – Свойството Parameters

Copyright © 2013 DAVID Holding Company ADO.NET Класът SqlCommand – параметри Console.Write("Input producer ID: "); int producerID = Convert.ToInt32(Console.ReadLine()); using (SqlCommand command = connection.CreateCommand()) { command.CommandText [BrandID], [Name] FROM [Brands] WHERE ([ProducerID] producerID); using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine("BrandID: {0}; Name: {1}", reader["BrandID"], reader["Name"]); } } }

Copyright © 2013 DAVID Holding Company ADO.NET Класът SqlCommand – съхранени процедури – На свойството CommandType се прсивоява стойност CommandType.StoredProcedure – Стойности на параметрите се подават през свойството Parameters

Copyright © 2013 DAVID Holding Company ADO.NET Класът SqlCommand – съхранени процедури using (SqlCommand command = connection.CreateCommand()) { command.CommandType = CommandType.StoredProcedure; command.CommandText = "[CreateProduct]"; 5); "Шоколад Milka алпийско мляко"); (decimal)532); (decimal)6.8); (decimal)29.6); (decimal)58); SqlDbType.Int).Direction = ParameterDirection.Output; command.ExecuteNonQuery(); Console.WriteLine("Created product ID: {0}", }

Copyright © 2013 DAVID Holding Company ADO.NET Трансакции в ADO.NET – класът TransactionScope – Методът Complete() – Имплементира IDisposable using (var ts = new TransactionScope()) using (var connection = new SqlConnection()) { connection.ConnectionString = ConfigurationManager.ConnectionStrings["connection"].ConnectionString; connection.Open(); // операции в трансакция ts.Complete(); }

Copyright © 2013 DAVID Holding Company SQL Injection атаки Какво е „SQL Injection“? – Пробив в сигурността на базата данни – Възможно е да се използва, ако динамично се генерират заявки с конкатениране на низове

Copyright © 2013 DAVID Holding Company SQL Injection атаки Пример за SQL Injection Console.WriteLine("Input brand name to search for: "); string name = Console.ReadLine(); using (SqlCommand command = connection.CreateCommand()) { command.CommandText [BrandID], [Name] FROM [Brands] WHERE ([Name] = N'" + name + "')"; using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine("BrandID: {0}; Name: {1}", reader["BrandID"], reader["Name"]); } } }

Copyright © 2013 DAVID Holding Company SQL Injection атаки Пример за SQL Injection '); DELETE FROM [Products];-- SELECT [ProductID], [Name] FROM [Products] WHERE ([Name] = N''); DELETE FROM [Products];--')

Copyright © 2013 DAVID Holding Company SQL Injection атаки Пример за SQL Injection Console.WriteLine("Input brand name to search for: "); string name = Console.ReadLine(); using (SqlCommand command = connection.CreateCommand()) { command.CommandText [BrandID], [Name] FROM [Brands] WHERE ([Name] name); using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine("BrandID: {0}; Name: {1}", reader["BrandID"], reader["Name"]); } } }

Copyright © 2013 DAVID Holding Company LINQ Разширителни методи на IEnumerable – Въведени в.NET Framework 3.5 – Улесняват прилагането на често използвани операции върху колекции – Следват функционалната парадигма – Описани в статичния клас System.Linq.Enumerable

Copyright © 2013 DAVID Holding Company LINQ Разширителни методи на IEnumerable IEnumerable Select (this IEnumerable source, Func selector) IEnumerable Where (this IEnumerable source, Func predicate) U Aggregate (this IEnumerable source, U seed, Func function) IEnumerable Skip (this IEnumerable source, int count) IEnumerable Take (this IEnumerable source, int count)

Copyright © 2013 DAVID Holding Company LINQ Разширителни методи на IEnumerable – отложено изпълнение var numbers = new List () { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; IEnumerable newNumbers = numbers.Where(x => x % 2 == 0).Select(x => x*2); // в този момент newNumbers съхранява информация за операциите, // които трябва да се извършат numbers.Add(10); // точно преди началото на обхождането на newNumbers с foreach, // операциите се изпълняват и резултатът се подава на цикъла foreach (int n in newNumbers) { Console.WriteLine(n); }

Copyright © 2013 DAVID Holding Company LINQ Разширителни методи на IEnumerable – методи, които предизвикват изпълнение – First, Last, FirstOrDefault, LastOrDefault – Sum, Min, Max, Average, Count – ToList, ToArray, ToDictionary

Copyright © 2013 DAVID Holding Company LINQ Разширителни методи на IEnumerable – сортировка IOrderedEnumerable OrderBy (this IEnumerable source, Func keySelector) IOrderedEnumerable OrderByDescending ( this IEnumerable source, Func keySelector) IOrderedEnumerable ThenBy (this IOrderedEnumerable source, Func keySelector) IOrderedEnumerable ThenByDescending ( this IOrderedEnumerable source, Func keySelector)

Copyright © 2013 DAVID Holding Company LINQ Разширителни методи на IEnumerable – групиране IEnumerable > GroupBy (this IEnumerable source, Func keySelector)

Copyright © 2013 DAVID Holding Company LINQ Разширителни методи на IEnumerable – съединения IEnumerable Join (this IEnumerable first, IEnumerable second, Func firstKeySelector, Func secondKeySelector, Func resultSelector) IEnumerable GroupJoin ( this IEnumerable first, IEnumerable second, Func firstKeySelector, Func secondKeySelector, Func, W> resultSelector)

Copyright © 2013 DAVID Holding Company LINQ Какво е „LINQ“? – Language INtegrated Query – Специален синтаксис в C# и Visual Basic.NET, който е подобен на SQL – Също въведен в.NET Framework 3.5 – Трансформира се в извиквания на разширителните методи на IEnumerable и IQueryable – Няколко различни имплементации

Copyright © 2013 DAVID Holding Company LINQ LINQ – примери var example1 = from n in numbers select n*2; var example1 = numbers.Select(n => n*2);

Copyright © 2013 DAVID Holding Company LINQ LINQ – примери var example2 = from n in numbers where n > 15 orderby n % 4, n % 7 descending select n; var example2 = numbers.Where(n => n > 15).OrderBy(n => n % 4).ThenByDescending(n => n % 7);

Copyright © 2013 DAVID Holding Company LINQ LINQ – примери var example3 = from n in numbers group n by n % 3 into ng where ng.Count() == 2 select ng; var example3 = numbers.GroupBy(n => n % 3).Where(ng => ng.Count() == 2);

Copyright © 2013 DAVID Holding Company LINQ LINQ – примери var example4 = from n in numbers join m in numbers on n % 3 equals m % 3 select Tuple.Create(n, m); var example4 = numbers.Join(numbers, n => n % 3, m => m % 3, (n, m) => Tuple.Create(n, m));

Copyright © 2013 DAVID Holding Company LINQ Интерфейсът IQueryable – Наследява IEnumerable – Различна имплементация на повечето разширителни методи на IEnumerable – Служи за трансформиране на LINQ заявки към SQL, XPath и др. – Клас с разширителни методи System.Linq.Queryable

Copyright © 2013 DAVID Holding Company LINQ Имплементации на LINQ – LINQ to Objects – LINQ to XML – LINQ to Dataset – LINQ to SQL – LINQ to Entities

Copyright © 2013 DAVID Holding Company LINQ to SQL Какво е „LINQ to SQL“? – Част от ADO.NET – Въведен в.NET Framework 3.5 – Object-Relational Mapping (ORM) – ръчно дефиниране или описване с DBML – Само с Data Provider for SQL Server – Пространството от имена System.Data.Linq

Copyright © 2013 DAVID Holding Company LINQ to SQL Ръчно описване на ORM модела – Прави се с атрибути – Пространството от имена System.Data.Linq.Mapping

Copyright © 2013 DAVID Holding Company LINQ to SQL Ръчно описване на ORM модела – таблици – Атрибутът Table – Атрибутът Column [Table(Name = "Producers")] public class Producer { [Column(IsPrimaryKey = true)] public int ProducerID { get; set; } [Column(CanBeNull = false)] public string Name { get; set; } [Column] public string Country { get; set; } }

Copyright © 2013 DAVID Holding Company LINQ to SQL Ръчно описване на ORM модела – връзки – Атрибутът Association – Типовете EntitySet и EntityRef

Copyright © 2013 DAVID Holding Company LINQ to SQL Ръчно описване на ORM модела – връзки [Table(Name = "Producers")] public class Producer { private EntitySet _brands; [Column(IsPrimaryKey = true)] public int ProducerID { get; set; } [Column(CanBeNull = false)] public string Name { get; set; } [Column] public string Country { get; set; } [Association(Storage = "_brands", OtherKey = "ProducerID")] public EntitySet Brands { get { return _brands; } set { _brands.Assign(value); } } }

Copyright © 2013 DAVID Holding Company LINQ to SQL Ръчно описване на ORM модела – връзки [Table(Name = "Brands")] public class Brand { private EntityRef _producer; [Column(IsPrimaryKey = true)] public int BrandID { get; set; } [Column] public int ProducerID { get; set; } [Column(CanBeNull = false)] public string Name { get; set; } [Column] public string Description { get; set; } [Association(Storage = "_producer", ThisKey = "ProducerID")] public Producer Producer { get { return _producer.Entity; } set { _producer.Entity = value; } } }

Copyright © 2013 DAVID Holding Company LINQ to SQL Ръчно описване на ORM модела – контекст – Базовият клас DataContext public class HealthyFoodContext : DataContext { public HealthyFoodContext(string connectionString) : base(connectionString) { } public Table Producers { get { return GetTable (); } } public Table Brands { get { return GetTable (); } } } string connectionString = ConfigurationManager.ConnectionStrings["connection"].ConnectionString; var context = new HealthyFoodContext(connectionString);

Copyright © 2013 DAVID Holding Company LINQ to SQL Примерни заявки IEnumerable brands = from b in context.Brands select b; IEnumerable brands = from b in context.Brands where b.BrandID > 3 select b; var brands = from b in context.Brands select new { BrandID = b.BrandID, BrandName = b.Name }; var brands = from b in context.Brands select new { ProducerName = b.Producer.Name, BrandName = b.Name }; IEnumerable brands = context.Producers.Where(p => p.Name != "Kraft Foods").SelectMany(p => p.Brands); Producer producer = context.Producers.Single(p => p.ProducerID == 3);

Copyright © 2013 DAVID Holding Company LINQ to SQL Описване на ORM модела с DBML – Специализиран XML документ – LINQ to SQL Classes файлов шаблон – Автоматично генериране на C# код – partial класове - добавяне на методи/свойства във външни файлове

Copyright © 2013 DAVID Holding Company LINQ to SQL ORM модел: Здравословно хранене

Copyright © 2013 DAVID Holding Company LINQ to SQL Добавяне на записи Brand brand = context.Brands.Single(b => b.BrandID == 5); var product = new Product { Name = "Шоколад Milka алпийско мляко", EnergyValue = 532, }; brand.Products.Add(product);

Copyright © 2013 DAVID Holding Company LINQ to SQL Редактиране на записи Product product = context.Products.Single(p => p.ProductID == 19); product.Proteins = (decimal)6.8; product.Fats = (decimal)29.6; product.Carbohydrates = (decimal)58;

Copyright © 2013 DAVID Holding Company LINQ to SQL Изтриване на записи Product product = context.Products.Single(p => p.ProductID == 19); context.Products.DeleteOnSubmit(product);

Copyright © 2013 DAVID Holding Company LINQ to SQL Записване на промените в базата данни – Методът SubmitChanges() на класа DataContext context.SubmitChanges();

Copyright © 2013 DAVID Holding Company Въпроси?

Copyright © 2013 DAVID Holding Company Благодаря! Александър Далемски – – – Skype: musasho – ДАВИД академия – – –