ADO.Net Connected model

Содержание

Слайд 2

Connection Command DataReader Transactions

Connection
Command
DataReader
Transactions

Слайд 3

Слайд 4

КОМПОНЕНТЫ CONNECTED MODEL Connection Command DataReader

КОМПОНЕНТЫ CONNECTED MODEL

Connection
Command
DataReader

Слайд 5

CONNECTION

CONNECTION

Слайд 6

СОЗДАНИЕ CONNECTION using (var conn = new SqlConnection( "Data Source=(local);Initial Catalog=AdventureWorksLT;Integrated

СОЗДАНИЕ CONNECTION

using (var conn = new SqlConnection(
"Data Source=(local);Initial Catalog=AdventureWorksLT;Integrated Security=True"))
{

conn.Open();
// ...
}

var conn = new SqlConnection(
"Data Source=(local);Initial Catalog=AdventureWorksLT;Integrated Security=True");
conn.Open();
// ...
conn.Close();

Слайд 7

CONNECTION STRINGS Data Source=(local); Integrated Security=True Initial Catalog=AdventureWorksLT; Server Data Base Windows-authentication

CONNECTION STRINGS

Data Source=(local);

Integrated Security=True

Initial Catalog=AdventureWorksLT;

Server

Data Base

Windows-authentication

Слайд 8

Общая структура param1=value; param2=value; … Свои элементы Connection Strings (ADO.NET) https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/connection-strings http://www.connectionstrings.com

Общая структура
param1=value; param2=value; …
Свои элементы

Connection Strings (ADO.NET)
https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/connection-strings

http://www.connectionstrings.com

Слайд 9

CONNECTION STRING BUILDER ПРИМЕР var connectionStringBuilder = new SqlConnectionStringBuilder { DataSource

CONNECTION STRING BUILDER ПРИМЕР

var connectionStringBuilder = new SqlConnectionStringBuilder
{
DataSource = "(local)",

InitialCatalog = "Northwind",
IntegratedSecurity = true
};
using (var connection =
new SqlConnection(connectionStringBuilder.ConnectionString))
{
connection.Open();
}
Слайд 10

COMMON CONNECTION PARAMETERS (SQLCLIENT) Connection parameters https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring(v=vs.110).aspx

COMMON CONNECTION PARAMETERS (SQLCLIENT)

Connection parameters
https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring(v=vs.110).aspx

Слайд 11

CONNECTION STRING + APP.CONFIG + PROVIDER FACTORIES providerName="System.Data.SqlClient" connectionString="Data Source=(local);Initial Catalog=Northwind;Integrated

CONNECTION STRING + APP.CONFIG + PROVIDER FACTORIES



providerName="System.Data.SqlClient"
connectionString="Data Source=(local);Initial Catalog=Northwind;Integrated Security=True"/>


var connectionStringItem = ConfigurationManager.ConnectionStrings["NorthwindConection"];
var connectionString = connectionStringItem.ConnectionString;
var providerName = connectionStringItem.ProviderName;
var factory = DbProviderFactories.GetFactory(providerName);
using (var connection =factory.CreateConnection())
{
connection.ConnectionString = connectionString;
connection.Open();
}

Слайд 12

CONNECTION POOLS Connection Pooling Application con1.Open() con2.Open() con3.Open() TestDB Connection pools

CONNECTION POOLS

Connection Pooling

Application

con1.Open()

con2.Open()

con3.Open()

TestDB

Connection pools

Pool A

Pool B

Data Source=(local);Initial Catalog=SqlDemoDB;Integrated Security=True

Data Source=(local);Initial Catalog=TestDB;Integrated

Security=True

Data Source=(local);Initial Catalog=SqlDemoDB;Integrated Security=True

con4.Open()

Data Source=(local);Initial Catalog=SqlDemoDB;Integrated Security=True

SqlDemoDB

Virtual
connections

Physical
connections

Слайд 13

Держите соединение с источником минимальное кол-во времени Всегда закрывайте все созданные

Держите соединение с источником минимальное кол-во времени
Всегда закрывайте все созданные вами

объекты Connection или DataReader, когда вы завершаете с ними работать

CONNECTION ПРОБЛЕМЫ И BEST PRACTICES

Best
Practice

Слайд 14

COMMAND

COMMAND

Слайд 15

СОЗДАНИЕ COMMAND Command should be associated with Connection using (IDbConnection connection

СОЗДАНИЕ COMMAND

Command should be associated with Connection

using (IDbConnection connection = new

SqlConnection(ConnectionString))
{
connection.Open();
var command = connection.CreateCommand();
}

using (IDbConnection connection = new SqlConnection(ConnectionString))
{
connection.Open();
IDbCommand command = new SqlCommand();
command.Connection = connection;
}

Слайд 16

ОБЩИЕ СВОЙСТВА COMMAND using (IDbConnection connection = new SqlConnection(ConnectionString)) { connection.Open();

ОБЩИЕ СВОЙСТВА COMMAND

using (IDbConnection connection = new SqlConnection(ConnectionString))
{
connection.Open();
var command

= connection.CreateCommand();
command.CommandText = "select count(*) from Northwind.Customers";
command.CommandType = CommandType.Text;
var customersCount = command.ExecuteScalar();
Console.WriteLine(customersCount);
}
Слайд 17

COMMAND TYPES

COMMAND TYPES

Слайд 18

COMMAND RESULTS

COMMAND RESULTS

Слайд 19

ПАРАМЕТРИЗОВАННЫЕ ЗАПРОСЫ. SQL ИНЪЕКЦИИ string.Format( "select top 1 * from dbo.Users

ПАРАМЕТРИЗОВАННЫЕ ЗАПРОСЫ. SQL ИНЪЕКЦИИ

string.Format( "select top 1 * from dbo.Users where Login = '{0}' and Password = '{1}'", login, password);

select top 1 * from dbo.Users 
where Login = ‘user' and Password = '123'

select top 1 * from dbo.Users 
where Login = '' OR 1 = 1

/*' and Password = '123'*/ --
Слайд 20

COMMAND PARAMETERS command.CommandText = "SELECT count(*) FROM Northwind.Products WHERE UnitPrice >=

COMMAND PARAMETERS

command.CommandText = 
"SELECT count(*) FROM Northwind.Products 
WHERE UnitPrice >= @minPrice";

IDbCommand

var minPrice = command.CreateParameter(); minPrice.ParameterName = "@minPrice"; minPrice.DbType = DbType.Decimal; minPrice.Value = 50;
command.Parameters.Add(minPrice);

SqlCommand

command.Parameters.AddWithValue("@minPrice", 50m);

Слайд 21

ВЫЗОВ STORED PROCEDURES var command = connection.CreateCommand(); command.CommandText = "[Northwind].[CustOrdersStatistic]"; command.CommandType

ВЫЗОВ STORED PROCEDURES

var command = connection.CreateCommand(); command.CommandText = "[Northwind].[CustOrdersStatistic]"; command.CommandType = CommandType.StoredProcedure; command.Parameters.AddWithValue("@CustomerID", "BONAP");
var all = command.Parameters.Add(     new SqlParameter()     {         ParameterName = "@All",         DbType = DbType.Int32,         Direction = ParameterDirection.Output     }); var shipped = command.Parameters.Add(     new SqlParameter()     {         ParameterName = "@Shipped",         DbType = DbType.Int32,         Direction = ParameterDirection.Output     }); command.ExecuteNonQuery(); Console.WriteLine("{0} {1}", all.Value, shipped.Value);

CREATE PROCEDURE [Northwind].[CustOrdersStatistic]     @CustomerID nchar(5),     @Shipped int OUTPUT,     @All int OUTPUT AS

Слайд 22

DATAREADER

DATAREADER

Слайд 23

Side-by-side execution can only take place in different connections Every readers

Side-by-side execution can only take place in different connections
Every readers should

be closed before next command start

READ RESULT

using (IDbConnection connection = 
new SqlConnection(ConnectionString)) {     var command = connection.CreateCommand();     command.CommandText = 
"SELECT CompanyName, City, Region FROM Northwind.Customers";     connection.Open();
    using (IDataReader reader = command.ExecuteReader())     {         while (reader.Read())         {             Console.WriteLine("{0} - {1}, {2}",                 reader["CompanyName"],                 reader["City"],                 reader["Region"]);         }     } }

Слайд 24

DATAREADER МЕТОДЫ DataReader Navigation Read() NextResult() HasRows Get fields value By

DATAREADER МЕТОДЫ

DataReader
Navigation
Read()
NextResult()
HasRows
Get fields value
By field name
[“field_name”]
By field index
GetString(i)
GetDateTime(i)
GetBoolean(i)

Слайд 25

READ MANY RESULT SETS var command = connection.CreateCommand(); command.CommandText = "SELECT

READ MANY RESULT SETS

var command = connection.CreateCommand(); command.CommandText =     "SELECT * " +     "FROM Northwind.Orders " +     "where OrderID = @orderId;" +     "SELECT p.ProductName, ods.UnitPrice, ods.Quantity " +     "FROM Northwind.[Order Details] ods " +     "LEFT JOIN Northwind.Products p ON p.ProductID = ods.ProductID " +     "WHERE ods.OrderID = @orderId;";
command.Parameters.AddWithValue("@orderId", 10262); using (var reader = command.ExecuteReader()) {     reader.Read();     Console.WriteLine("{0} ({1})", reader["OrderID"], reader["OrderDate"]);
    reader.NextResult();     while (reader.Read())         Console.WriteLine("\t{0} - {1}", reader["ProductName"], reader["UnitPrice"]); }

Слайд 26

TRANSACTIONS

TRANSACTIONS