ado.net, i data provider e l'architettura connessa

72
1 / 70 ADO.NET, i Data Provider e l'architettura connessa Silvano Coriani Developer & Platform Evangelism MCTrainer MCSDeveloper MCADeveloper MCSEInternet MCDBA

Upload: lelia

Post on 15-Jan-2016

48 views

Category:

Documents


0 download

DESCRIPTION

ADO.NET, i Data Provider e l'architettura connessa. Silvano Coriani Developer & Platform Evangelism MCT rainer MCSD eveloper MCAD eveloper MCSEI nternet MCDBA. Da dove iniziare. Agenda. .NET Data Access Overview. .NET Application. DataSet. System.Data.Oracle. System.Data.SqlClient. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: ADO.NET, i Data Provider e l'architettura connessa

1 / 70

ADO.NET, i Data Provider e l'architettura connessa

Silvano CorianiDeveloper & Platform Evangelism

MCTrainerMCSDeveloperMCADeveloperMCSEInternetMCDBA

Page 2: ADO.NET, i Data Provider e l'architettura connessa

2 / 70

Da dove iniziare...

Page 3: ADO.NET, i Data Provider e l'architettura connessa

3 / 70

AgendaAgenda

Page 4: ADO.NET, i Data Provider e l'architettura connessa

4 / 70

.NET Data Access Overview.NET Data Access Overview

Page 5: ADO.NET, i Data Provider e l'architettura connessa

5 / 70

.NET Application.NET Application

ODBCODBC

OLE DBOLE DB

Other DBMSOther DBMSNon-relationalNon-relational

sourcessources

OLE DB ProviderOLE DB Provider

SQL ServerSQL Server

System.Data.SqlClientSystem.Data.SqlClient System.Data.OleDbSystem.Data.OleDbSystem.Data.OracleSystem.Data.Oracle

OracleOracle

DataSetDataSet

System.Data.OdbcSystem.Data.Odbc

Page 6: ADO.NET, i Data Provider e l'architettura connessa

6 / 70

.NET Data Provider

• System.Data

Page 7: ADO.NET, i Data Provider e l'architettura connessa

7 / 70

.NET Data Provider

• connessaCommand

Page 8: ADO.NET, i Data Provider e l'architettura connessa

8 / 70

.NET Data Provider

• DataAdapter• DataReader

Page 9: ADO.NET, i Data Provider e l'architettura connessa

9 / 70

ADO.NET e SQL Server 2000

Page 10: ADO.NET, i Data Provider e l'architettura connessa

10 / 70

SqlClient .NET Data Provider

Page 11: ADO.NET, i Data Provider e l'architettura connessa

11 / 70

SqlClient Managed Provider

• Non utilizza direttamente i cursori server di SQL Server– Nel caso, occorrono comandi T-SQL

espliciti (OPEN CURSOR, sp_cursor, sp_executesql ecc.)

– Oppure utilizzare ADO 2.x attraverso COM Interop

• Permette di interagire con le funzionalità XML di SQL Server 2000– ExecuteXmlReader()

Page 12: ADO.NET, i Data Provider e l'architettura connessa

12 / 70

SqlClient .NET Data Provider Object Model

SqlConnection

SqlCommand

SqlParameterCollectionSqlDataReader

SqlParameter

System.Xml.XmlReader

Object

Page 13: ADO.NET, i Data Provider e l'architettura connessa

13 / 70

SqlClient e il CLRSqlClient e il CLR

Common Language RuntimeCommon Language Runtime

SqlServerSqlServer

SqlClientSqlClient

TDSTDS

ParserParser

Page 14: ADO.NET, i Data Provider e l'architettura connessa

14 / 70

Accesso ai dati nel database Accesso ai dati nel database serverserver

Page 15: ADO.NET, i Data Provider e l'architettura connessa

15 / 70

Query ad-hocQuery ad-hoc

Page 16: ADO.NET, i Data Provider e l'architettura connessa

16 / 70

Prepare / ExecutePrepare / Execute

• PreparedSqlCommandPreparedSqlCommand

Page 17: ADO.NET, i Data Provider e l'architettura connessa

17 / 70

sp_executesqlsp_executesql

• Alternativa valida alle stored procedureAlternativa valida alle stored procedure– Elimina la gestione lato server Elimina la gestione lato server

• Se si vuole ottenere il riutilizzo del piano Se si vuole ottenere il riutilizzo del piano di esecuzione, anche qui occorre definire di esecuzione, anche qui occorre definire correttamente I parametri con il relativo correttamente I parametri con il relativo tipotipo

• Eseguita in modalità RPCEseguita in modalità RPC– Più efficiente nell’esecuzione sul serverPiù efficiente nell’esecuzione sul server– Riutilizzo del piano di esecuzione della queryRiutilizzo del piano di esecuzione della query

exec sp_executesql N‘Insert T1 Values (@p)’,N’@p float’,1exec sp_executesql N‘Insert T1 Values (@p)’,N’@p float’,1

Page 18: ADO.NET, i Data Provider e l'architettura connessa

18 / 70

Stored ProcedureStored Procedure

• WITH RECOMPILEWITH RECOMPILE

Page 19: ADO.NET, i Data Provider e l'architettura connessa

19 / 70

Stored ProcedureStored Procedure

• SqlCommandCommandTypeSqlCommandCommandType– Definizione di tutti i parametri tipizzati Definizione di tutti i parametri tipizzati

utilizzati dalla stored procedureutilizzati dalla stored procedure– MAIMAI

Page 20: ADO.NET, i Data Provider e l'architettura connessa

20 / 70

Classica Stored ProcedureClassica Stored Procedure

CREATE PROC spGetCustomerOrdersCREATE PROC spGetCustomerOrders

@CustomerID int@CustomerID int

@NumOrder int OUTPUT@NumOrder int OUTPUT

ASAS

-- Validazione di parametri di input-- Validazione di parametri di input

......

-- Logica applicativa (eventualmente chiama altre SP)-- Logica applicativa (eventualmente chiama altre SP)

......

-- Restituzione di uno o più result set-- Restituzione di uno o più result set

......

-- Restituisco il valore di ritorno-- Restituisco il valore di ritorno

Page 21: ADO.NET, i Data Provider e l'architettura connessa

21 / 70

Stored Procedure FOR XMLStored Procedure FOR XML

CREATE PROC spGetCustomerOrdersXMLCREATE PROC spGetCustomerOrdersXML@CustomerID int@CustomerID int@NumOrder int OUTPUT@NumOrder int OUTPUT

ASAS-- Validazione di parametri di input-- Validazione di parametri di input......-- Logica applicativa (eventualmente chiama altre SP)-- Logica applicativa (eventualmente chiama altre SP)......-- Restituzione di uno o più result set-- Restituzione di uno o più result setSELECTSELECT

C.CustomerID,O.OrderID,O.OrderDateC.CustomerID,O.OrderID,O.OrderDateFROMFROM

Customer C Left Join Orders O ON C.CustomerID=O.CustomerIDCustomer C Left Join Orders O ON C.CustomerID=O.CustomerIDWHEREWHERE

C.CustomerID = @CustomerIDC.CustomerID = @CustomerIDFOR XML AUTO, ELEMENTS FOR XML AUTO, ELEMENTS –- o EXPLICIT–- o EXPLICIT-- Restituisco il valore di ritorno-- Restituisco il valore di ritorno

Page 22: ADO.NET, i Data Provider e l'architettura connessa

22 / 70

Posso passare un set di record ad una Posso passare un set di record ad una SP?SP?

CREATE PROC spInsertCustomersXMLCREATE PROC spInsertCustomersXML@RecordSetXML varchar(1024)@RecordSetXML varchar(1024)

ASAS-- Carico il doc XML nel DOM-- Carico il doc XML nel DOMsp_xml_preparedocumentsp_xml_preparedocument @h OUTPUT, @ @h OUTPUT, @ RecordSetXML RecordSetXML -- Eseguo un inserimento in una tabella filtrando-- Eseguo un inserimento in una tabella filtrando-- le informazioni che mi servono attraverso XPath-- le informazioni che mi servono attraverso XPathOpenXMLOpenXML(@h,'//Customer')(@h,'//Customer')

WITH (CustomerID varchar(5) '@ID', WITH (CustomerID varchar(5) '@ID', CompanyName CompanyName

varchar(32),'@name')varchar(32),'@name')-- Rimuovo il documento dalla memoria-- Rimuovo il documento dalla memoriasp_xml_removedocumentsp_xml_removedocument

Page 23: ADO.NET, i Data Provider e l'architettura connessa

23 / 70

SQL Server 2000 Best SQL Server 2000 Best PracticesPractices

Page 24: ADO.NET, i Data Provider e l'architettura connessa

24 / 70

CursoriCursori

• row-basedrow-based– setset

Page 25: ADO.NET, i Data Provider e l'architettura connessa

25 / 70

SqlConnectionSqlConnection

• IDbConnectionIDbConnection• ConnectionStringSqlCommandSqlDataReaConnectionStringSqlCommandSqlDataRea

derder– Close()Dispose()Close()Dispose()

• BeginTransactionBeginTransaction– SqlTransactionSqlTransaction

Page 26: ADO.NET, i Data Provider e l'architettura connessa

26 / 70

SqlConnectionSqlConnection• AttachDBFilenameSqlClientPermissionAttachDBFilenameSqlClientPermission

Page 27: ADO.NET, i Data Provider e l'architettura connessa

27 / 70

SqlConnectionSqlConnection

• SqlCommandSqlDataAdapterSqlCommandSqlDataAdapter

[Visual Basic][Visual Basic]

Dim nwindConn As SqlConnection = New SqlConnection("Data _ Dim nwindConn As SqlConnection = New SqlConnection("Data _ Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind")Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind")

nwindConn.Open()nwindConn.Open()

[C#][C#]

SqlConnection nwindConn = new SqlConnection("Data Source=localhost; Integrated SqlConnection nwindConn = new SqlConnection("Data Source=localhost; Integrated Security=SSPI; Initial Catalog=northwind");Security=SSPI; Initial Catalog=northwind");

nwindConn.Open();nwindConn.Open();

Page 28: ADO.NET, i Data Provider e l'architettura connessa

28 / 70

SqlCommandSqlCommand

Page 29: ADO.NET, i Data Provider e l'architettura connessa

29 / 70

SqlCommandSqlCommand• Implementa l’interfaccia IDbCommandImplementa l’interfaccia IDbCommand

– ExecuteReader()ExecuteReader()• Da utilizzare quando è previsto un result set come Da utilizzare quando è previsto un result set come

ritornoritorno– ExecuteScalar()ExecuteScalar()

• Da utilizzare per aggregazioni o risultati di calcoliDa utilizzare per aggregazioni o risultati di calcoli• Ritorna solo la prima colonna della prima riga, gli Ritorna solo la prima colonna della prima riga, gli

altri dati vengono persialtri dati vengono persi– ExecuteNonQuery()ExecuteNonQuery()

• Ottimizzato per query che non ritornano result set Ottimizzato per query che non ritornano result set ma solo parametri di ritorno o numero di record ma solo parametri di ritorno o numero di record modificatimodificati

– ExecuteXmlReader()ExecuteXmlReader()

Page 30: ADO.NET, i Data Provider e l'architettura connessa

30 / 70

SqlCommand e query libereSqlCommand e query libereDim sqlConn As SQLConnection Dim sqlCmd As SQLCommand Dim rowsAffected As Integer Try

' Creo la connessione sqlConn = New SQLConnection(myConnString) ' Creo il comando sqlCmd = New SQLCommand() ' specifico il tipo di comando With sqlCmd

.CommandType = CommandType.Text

.CommandText = "Insert Customers (Alias, CustomerName) _ Values ('myAlias','myName')"

.Connection = sqlConn End With ' apro la connessione sqlConn.Open() ' eseguo il comando, vengono ritornate le righe inserite rowsAffected = sqlCmd.ExecuteNonQuery()

Catch e As Exception ' gestisco l’eccezione …

Finally ' chiudo la connesione sqlConn.Close()

End Try

Page 31: ADO.NET, i Data Provider e l'architettura connessa

31 / 70

SqlCommand e le Stored SqlCommand e le Stored ProcedureProcedure

• ParametersParameters

Page 32: ADO.NET, i Data Provider e l'architettura connessa

32 / 70

SqlCommand e le Stored SqlCommand e le Stored ProcedureProcedure

• ExecuteReader()DataReaderExecuteReader()DataReader• DBNull.ValueDBNull.Value per impostare a null per impostare a null

un parametro di input di una SPun parametro di input di una SP• CommandBehaviorCommandBehavior

Page 33: ADO.NET, i Data Provider e l'architettura connessa

33 / 70

SqlCommand e le Stored SqlCommand e le Stored ProcedureProcedure

sqlConn = New SQLConnection(myConnString)

' Create a new command object

sqlCmd = New SQLCommand()

' Specify the stored procedure and connection

With sqlCmd

.CommandType = CommandType.StoredProcedure

.CommandText = "InsertCustomer"

.Connection = sqlConn

End With

' Define and add a parameter to the parameters collection

param = sqlCmd.Parameters.Add(New SQLParameter("@p", SQLDBType.NVarChar, 100)

With param

.Direction = ParameterDirection.Input

' Set the parameter value

.Value = “xyz"

End With

' Add remaining parameters

' Open the connection

sqlConn.Open()

' Execute the command

rowsAffected = sqlCmd.ExecuteNonQuery()

Page 34: ADO.NET, i Data Provider e l'architettura connessa

34 / 70

SqlDataReaderSqlDataReader• SqlCommandSqlCommand• Read()IEnumerableRead()IEnumerable

Page 35: ADO.NET, i Data Provider e l'architettura connessa

35 / 70

SqlDataReaderSqlDataReader

• IDataReaderIDataRecordIDataReaderIDataRecord– Per accesso a informazioni in formato Per accesso a informazioni in formato

rettangolare e nonrettangolare e non

• È possibile accedere ai dati nelle È possibile accedere ai dati nelle singole colonne per indicenome del singole colonne per indicenome del campo o attraverso metodo campo o attraverso metodo accessori dedicati ai tipi di dato accessori dedicati ai tipi di dato contenuticontenuti– GetDateTime()GetDouble()GetGuid()GetDateTime()GetDouble()GetGuid(), ,

GetInt32()GetInt32()

Page 36: ADO.NET, i Data Provider e l'architettura connessa

36 / 70

SqlDataReaderSqlDataReader• NextResult()NextResult()• La struttura del result set è La struttura del result set è

descritta attraverso una “schema descritta attraverso una “schema table”table”– GetSchemaTable()GetSchemaTable()

Page 37: ADO.NET, i Data Provider e l'architettura connessa

37 / 70

Utilizzo di SqlDataReaderUtilizzo di SqlDataReader

[Visual Basic][Visual Basic]

Dim myReader As SqlDataReader = myCommand.ExecuteReader()Dim myReader As SqlDataReader = myCommand.ExecuteReader()

Do While myReader.Read()Do While myReader.Read()

Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", myReader.GetInt32(0), Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", myReader.GetInt32(0), myReader.GetString(1))myReader.GetString(1))

LoopLoop

myReader.Close()myReader.Close()

[C#][C#]

SqlDataReader myReader = myCommand.ExecuteReader();SqlDataReader myReader = myCommand.ExecuteReader();

while (myReader.Read())while (myReader.Read())

Console.WriteLine("\t{0}\t{1}", myReader.GetInt32(0), myReader.GetString(1));Console.WriteLine("\t{0}\t{1}", myReader.GetInt32(0), myReader.GetString(1));

myReader.Close();myReader.Close();

Page 38: ADO.NET, i Data Provider e l'architettura connessa

38 / 70

XmlReaderXmlReader• ExecuteXmlReader() FOR XMLExecuteXmlReader() FOR XML

[Visual Basic]

Dim custCMD As SqlCommand = New SqlCommand("SELECT * FROM Customers FOR XML _ AUTO, ELEMENTS", nwindConn)

Dim myXR As System.Xml.XmlReader = custCMD.ExecuteXmlReader()

[C#]

SqlCommand custCMD = new SqlCommand("SELECT * FROM Customers FOR XML AUTO, ELEMENTS", nwindConn);

System.Xml.XmlReader myXR = custCMD.ExecuteXmlReader();

Page 39: ADO.NET, i Data Provider e l'architettura connessa

39 / 70

Operazioni di Data Definition Operazioni di Data Definition LanguageLanguage

• ExecuteNonQuery()ExecuteNonQuery()

Page 40: ADO.NET, i Data Provider e l'architettura connessa

40 / 70

Transazioni in ADO.NETTransazioni in ADO.NET• Transazioni localiTransazioni locali

– All’interno del codice SQL delle Stored All’interno del codice SQL delle Stored ProcedureProcedure• BEGIN/COMMIT TRANBEGIN/COMMIT TRAN

– SqlOleDbTransactionSqlOleDbTransaction

Page 41: ADO.NET, i Data Provider e l'architettura connessa

41 / 70

Transazioni in ADO.NETTransazioni in ADO.NET

[C#]

SqlConnection conn = new SqlConnection();

conn.Open("...");

SqlTransaction tx = conn.BeginTransaction();

SqlCommand cmd = conn.CreateCommand();

cmd.CommandText = "...";

cmd.Transaction = tx;

cmd.ExecuteNonQuery();

tx.Commit();

[VB.NET]

OleDbConnection conn = new OleDbConnection();

conn.Open("...");

OleDbTransaction tx = conn.BeginTransaction();

OleDbCommand cmd = conn.CreateCommand();

cmd.CommandText = "...";

cmd.Transaction = tx;

cmd.ExecuteNonQuery();

tx.Commit();

Page 42: ADO.NET, i Data Provider e l'architettura connessa

42 / 70

Error & Info handlingError & Info handling

• Errori durante l’esecuzione di Errori durante l’esecuzione di operazioni sulla fonte dati vengono operazioni sulla fonte dati vengono intercettati attraverso le eccezioniintercettati attraverso le eccezioni

• Ogni Managed providers Ogni Managed providers implementa le proprie eccezioniimplementa le proprie eccezioni– SqlExceptionSqlException

• SqlErrorSqlError

Page 43: ADO.NET, i Data Provider e l'architettura connessa

43 / 70

Error & Info handlingError & Info handling

• SqlInfoMessageEventHandlerInfoMSqlInfoMessageEventHandlerInfoMessageessage

Page 44: ADO.NET, i Data Provider e l'architettura connessa

44 / 70

Error & Info handlingError & Info handling

public static int Main(string[] args) {

try

{

SqlConnection conn = new SqlConnection(“ConnectionString”);

// Associo un event handler all’evento di InfoMessage

conn.InfoMessage += new SqlInfoMessageEventHandler(myHandler);

conn.Open();

}

catch (SqlException e) {

for (int i=0; i < e.Errors.Count; i++)

{

Console.WriteLine("Index #" + i + "\n Error: " + e.Errors[i].ToString() + "\n");

}

catch (Exception e)

{

Console.WriteLine(e.Message);

}

finally

{ conn.Close(); }

return 0;

}

Page 45: ADO.NET, i Data Provider e l'architettura connessa

45 / 70

Error & Info handlingError & Info handling

public static void myHandler(object conn, SqlInfoMessageEventArgs e)

{

Console.WriteLine("caught a SQL warning");

for (int i=0; i < e.Errors.Count; i++)

{

Console.WriteLine("Index#" + i + "\n" + "Warning:" + e.Errors[i].ToString() +

"\n");

}

}

Page 46: ADO.NET, i Data Provider e l'architettura connessa

46 / 70

Considerazioni sulle Considerazioni sulle performanceperformance

• Dispose()DataReaderDispose()DataReader

Page 47: ADO.NET, i Data Provider e l'architettura connessa

47 / 70

Considerazioni sulle Considerazioni sulle performanceperformance

• FOR XMLXmlReaderFOR XMLXmlReader

Page 48: ADO.NET, i Data Provider e l'architettura connessa

48 / 70

Considerazioni sulle Considerazioni sulle performanceperformance

• Tenere sempre presente il tipo di Tenere sempre presente il tipo di comando e di valori di ritornocomando e di valori di ritorno– Singola entità letta per chiave primariaSingola entità letta per chiave primaria

• Stored Procedure con parametri di ritornoStored Procedure con parametri di ritorno– Valore scalareValore scalare

• ExecuteScalar()ExecuteScalar()– DataReaderDataReader

Page 49: ADO.NET, i Data Provider e l'architettura connessa

49 / 70

Codice portabile tra più Data Provider

Page 50: ADO.NET, i Data Provider e l'architettura connessa

50 / 70

Integrare applicazioni .NET con altri database server

Page 51: ADO.NET, i Data Provider e l'architettura connessa

51 / 70

OleDb Managed ProviderOleDb Managed Provider

Page 52: ADO.NET, i Data Provider e l'architettura connessa

52 / 70

OleDb Managed ProviderOleDb Managed Provider

Common Language RuntimeCommon Language Runtime

Data SourceData Source

RelazionaleRelazionale

e none non

OleDbOleDb

ManagedManaged

ProviderProvider

Pro

vid

er

Pro

vid

er

OLED

BO

LED

B

Page 53: ADO.NET, i Data Provider e l'architettura connessa

53 / 70

OLEDB Managed Provider OLEDB Managed Provider Object ModelObject Model

OleDbConnection

OleDbCommand

OleDbParameterCollectionOleDbDataReader

.Connection

.OleDbParameter

.CreateCommand

.Parameters

.Item

.Add

.CreateParameter

.ExecuteReader

Object

.Item

Page 54: ADO.NET, i Data Provider e l'architettura connessa

54 / 70

OleDbConnectionOleDbConnection

[Visual Basic][Visual Basic]

Dim myConnection As String = "Provider=SQLOLEDB;Data Source=localhost;Initial _ Dim myConnection As String = "Provider=SQLOLEDB;Data Source=localhost;Initial _ Catalog=Northwind;Integrated Security=SSPI;"Catalog=Northwind;Integrated Security=SSPI;"

Dim myConn As New OleDbConnection(myConnection)Dim myConn As New OleDbConnection(myConnection)

myConn.Open()myConn.Open()

[C#][C#]

String myConnection = "Provider=SQLOLEDB;Data Source=localhost;Initial String myConnection = "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;";Catalog=Northwind;Integrated Security=SSPI;";

OleDbConnection myConn = new OleDbConnection(myConnection);OleDbConnection myConn = new OleDbConnection(myConnection);

myConn.Open();myConn.Open();

Page 55: ADO.NET, i Data Provider e l'architettura connessa

55 / 70

OleDbCommandOleDbCommand

public void ReadMyData(string myConnString) public void ReadMyData(string myConnString)

{{

string mySelectQuery = "SELECT OrderID, CustomerID FROM Orders";string mySelectQuery = "SELECT OrderID, CustomerID FROM Orders";

OleDbConnection myConnection = new OleDbConnection(myConnString);OleDbConnection myConnection = new OleDbConnection(myConnString);

OleDbCommand myCommand = new OleDbCommand(mySelectQuery,myConnection);OleDbCommand myCommand = new OleDbCommand(mySelectQuery,myConnection);

myConnection.Open();myConnection.Open();

OleDbDataReader myReader = myCommand.ExecuteReader();OleDbDataReader myReader = myCommand.ExecuteReader();

try try

{ {

while (myReader.Read()) while (myReader.Read())

{Console.WriteLine(myReader.GetInt32(0) + ", " + myReader.GetString(1));}{Console.WriteLine(myReader.GetInt32(0) + ", " + myReader.GetString(1));}

}}

finally finally

{{

// da chiudere sempre dopo aver terminato la lettura// da chiudere sempre dopo aver terminato la lettura

myReader.Close();myReader.Close();

// da chiudere sempre dopo aver terminato la lettura// da chiudere sempre dopo aver terminato la lettura

myConnection.Close();}myConnection.Close();}

}}

Page 56: ADO.NET, i Data Provider e l'architettura connessa

56 / 70

ODBC Managed ProviderODBC Managed Provider

Page 57: ADO.NET, i Data Provider e l'architettura connessa

57 / 70

ODBC Managed ProviderODBC Managed Provider

Common Language RuntimeCommon Language Runtime

Data SourceData Source

RelazionaleRelazionale

OdbcOdbc

ManagedManaged

ProviderProvider

Dri

ver

Dri

ver

OD

BC

OD

BC

Page 58: ADO.NET, i Data Provider e l'architettura connessa

58 / 70

ODBC Managed Provider ODBC Managed Provider Object ModelObject Model

OdbcConnection

OdbcCommand

OdbcParameterCollectionOdbcDataReader

.Connection

OdbcParameter

.CreateCommand

.Parameters

.Item

.Add

.CreateParameter

.ExecuteReader

Object

.Item

Page 59: ADO.NET, i Data Provider e l'architettura connessa

59 / 70

OleDbDataReaderOleDbDataReader

• ExecuteReader()ExecuteReader()

Page 60: ADO.NET, i Data Provider e l'architettura connessa

60 / 70

Utilizzo di OleDbDataReaderUtilizzo di OleDbDataReader

Public Sub ReadMyData(myConnString As String)

Dim mySelectQuery As String = "SELECT OrderID, CustomerID FROM Orders"

Dim myConnection As New OleDbConnection(myConnString)

Dim myCommand As New OleDbCommand(mySelectQuery, myConnection)

myConnection.Open()

Dim myReader As OleDbDataReader

myReader = myCommand.ExecuteReader()

' La chiamata a Read posiziona sul primo record

While myReader.Read()

Console.WriteLine(myReader.GetInt32(0).ToString() + ", " _

+ myReader.GetString(1))

End While

' chiudere il reader

myReader.Close()

' chiudere la connessione

myConnection.Close()

End Sub

Page 61: ADO.NET, i Data Provider e l'architettura connessa

61 / 70

DB2 e ADO.NET

ODBC .Net Data ODBC .Net Data ProviderProvider

OdbcConnectionOdbcConnection

OdbcCommandOdbcCommand

OdbcDataAdapterOdbcDataAdapter

OdbcDataReaderOdbcDataReader

OLE DB .Net OLE DB .Net Data ProviderData Provider

OleDbConnectionOleDbConnection

OleDbCommandOleDbCommand

OleDbAdapterOleDbAdapter

OleDbDataReaderOleDbDataReader

DB2 .Net Data DB2 .Net Data ProviderProvider

DB2ConnectionDB2Connection

DB2CommandDB2Command

DB2DataAdapterDB2DataAdapter

DB2DataReaderDB2DataReader

IBM DB2 ODBC IBM DB2 ODBC DriverDriver

IBM DB2 OLE IBM DB2 OLE DB ProviderDB Provider

ApplicationApplicationSystem.Data.OleDbSystem.Data.OleDb

ApplicationApplicationMicrosft.Data.ODBCMicrosft.Data.ODBC

ApplicationApplicationIBM.Data.DB2IBM.Data.DB2

DB2DB2

Page 62: ADO.NET, i Data Provider e l'architettura connessa

62 / 70

DB2Connection Object

Page 63: ADO.NET, i Data Provider e l'architettura connessa

63 / 70

DB2Command Object

Page 64: ADO.NET, i Data Provider e l'architettura connessa

64 / 70

DB2DataReader Object

Page 65: ADO.NET, i Data Provider e l'architettura connessa

65 / 70

Oracle e .NET

• Microsoft .NET Data Provider per Oracle– Prodotto da Microsoft– Usa gli strumenti client di Oracle

• Oracle Data Provider per .NET (ODP.NET)– Sviluppato da Oracle– Integrazione completa– Espone tutte le caratteristiche di un Oracle

DB• Oracle Connect per .NET

Page 66: ADO.NET, i Data Provider e l'architettura connessa

66 / 70

.NET Data Providers

Page 67: ADO.NET, i Data Provider e l'architettura connessa

67 / 70

ODP.NET

DataSet OracleDataAdapter

OracleTransaction

OracleCommand

OracleConnection

OracleDataReader

OracleCommandBuilder

Page 68: ADO.NET, i Data Provider e l'architettura connessa

68 / 70

ODP.NET

Page 69: ADO.NET, i Data Provider e l'architettura connessa

69 / 70

In Sintesi

Page 70: ADO.NET, i Data Provider e l'architettura connessa

70 / 70

Link utili

Page 71: ADO.NET, i Data Provider e l'architettura connessa

71 / 70

News

Page 72: ADO.NET, i Data Provider e l'architettura connessa

72 / 70