Vous êtes sur la page 1sur 10

ADO.NET : Connection, Command et DataReader avec VB.

NET
par leduke zoom61
Date de publication : 21 aot 2003

Cet article pour but de prsenter les objets Connection, Command et Datareader dans ADO.NET

ADO.NET : Connection, Command et DataReader avec VB.NET par leduke zoom61

I - Que nous apporte ADO.NET ?...............................................................................................................................3 II - Choix d'un fournisseur de donnes .NET..............................................................................................................3 III - Le modle objet ADO.Net.....................................................................................................................................4 IV - L'objet Connection................................................................................................................................................ 4 V - L'objet Command...................................................................................................................................................5 VI - L'objet DataReader............................................................................................................................................... 6 VII - Comment appeler une procdure stocke ?....................................................................................................... 8

-2Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 leduke. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://dotnet.developpez.com/articles/ado1/vbnet/

ADO.NET : Connection, Command et DataReader avec VB.NET par leduke zoom61

I - Que nous apporte ADO.NET ?


Avec ADO.Net Microsoft s'est efforc de rpondre efficacement aux besoins des applications Web en apportant les nouveauts suivantes : Une architecture plus optimise : Avec .Net, de nouveaux fournisseurs de donnes voient le jour. Certains fonctionnent en mode natif, supprimant des couches intermdiaires entre l'application et sa source de donnes. ADO.Net pourra ainsi tre plus rapide accdant directement la source de donnes. Par exemple le .NET Framework comprend le fournisseur de donnes SQL Server .NET en mode natif via le namespace System.Data.SqlClient. Un meilleur support du mode dconnect : Le design de ADO.Net rpond aux exigences des modles de dveloppement des applications actuelles. Dans une application Web, le maintien d'une connexion SGBD ouverte doit tre la plus courte possible, car le nombre de connexions ouvertes vers une source de donnes peut constituer un frein la capacit de monte en charge d'une application. Le modle ADO dans son temps, avait volu afin de rpondre ce besoin par un Recordset dconnect. Aujourd'hui Microsoft encourage le mode dconnect et propose des classes spcialises supportant les deux modes : connect (via l'objet DataReader) et dconnect (via l'objet DataSet). Un meilleur support de XML : Le XML est utilis au sein du Framework .NET comme le standard de description et de persistance des donnes. Dans ADO.Net il est utilis comme le format de transmission universelle de donnes.

II - Choix d'un fournisseur de donnes .NET


Pour pouvoir faire appel aux classes proposes par ADO.Net il est ncessaire d'inclure une rfrence l'espace de noms correspondant. Vous pouvez soit inclure l'espace System.Data soit inclure des classes de cet espace comme System.Data.OleDb ou System.Data.SqlClient ; tout dpend de la source de donnes utilises.
'Inclusion d'un namespace Imports System.Data Imports System.Data.SqlClient

Plusieurs espaces de noms sont disponibles avec ADO.Net parmi lesquels : Espace de nom System.Data.SqlClient System.Data.OleDb System.Data.Odbc System.Data.OracleClient System.Data.XML System.Data.SQLTypes Description Fournisseur de donnes spcifiques pour SQLServer V7 ou suprieure Propose la gestion de sources de donnes accdes via un driver OleDb Propose la gestion de sources de donnes accdes via un driver ODBC Propose un accs des sources de donnes Oracle (v8.1.7 ou suprieure) Propose des classes permettant d'accder la fonctionnalit XML sous SQL Server 2000 ou suprieur Propose des classes pour des types de donnes spcifiques Microsoft SQL Server

-3Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 leduke. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://dotnet.developpez.com/articles/ado1/vbnet/

ADO.NET : Connection, Command et DataReader avec VB.NET par leduke zoom61

Dans la suite de notre article, nous utiliserons le fournisseur de donnes SqlClient et accderons une base SQLServer 2000 fournie en exemple nomm Northwind .

III - Le modle objet ADO.Net

ADO.Net comprend quelques objets similaires aux ADO (comme les objets Connection et Command) dont la syntaxe a volu. L'objet Recordset n'existe plus, il a t remplac par les objets DataReader et DataSet. Regardons de plus prs chacun de ces objets. Objet Connection Command DataReader Description Ouvre une connexion vers une source de donnes spcifiques Excute une commande sur une source de donnes Lit un flux de donnes partir d'une source de donnes en mode connect. Le mode d'accs est en lecture seule avec un curseur en avant seulement. Reprsente un ensemble de donnes en mode dconnect. Il peut tre constitu de plusieurs tables ainsi que des relations et contraintes existant entre elles. Remplit un DataSet et rpercute les mises jour dans la source de donnes.

DataSet

DataAdapte

IV - L'objet Connection
La connectivit SQLServer 2000 est assure par l'objet SqlConnection de l'espace de noms System.Data.SqlClient. Le framework .Net propose ainsi des objets de connexion diffrents en fonction du type de
-4Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 leduke. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://dotnet.developpez.com/articles/ado1/vbnet/

ADO.NET : Connection, Command et DataReader avec VB.NET par leduke zoom61

fournisseur de donnes choisies. Par exemple vous devrez utiliser l'objet OleDbConnection si votre fournisseur est un fournisseur OleDb.La connectivit SQLServer 2000 est assure par l'objet SqlConnection de l'espace de noms System.Data.SqlClient. Le framework .Net propose ainsi des objets de connexion diffrents en fonction du type de fournisseur de donnes choisies. Par exemple vous devrez utiliser l'objet OleDbConnection si votre fournisseur est un fournisseur OleDb. L'ouverture d'une connexion est ralise par la mthode Open et la fermeture par la mthode Close.
' Exemple de gestion d'une connexion Imports System Imports System.Data.SqlClient Imports System.IO namespace ExempleAdoNetVBnet public class SQLConnexion public static void Main() Dim strConnexion As String = "Data Source=localhost; Integrated Security=SSPI;" & "Initial Catalog=Northwind" try Dim oConnection As SqlConnection = New SqlConnection(strConnexion) oConnection.Open() Console.WriteLine("Etat de la connexion : " & oConnection.State) oConnection.Close() catch e as Exception Console.WriteLine("L'erreur suivante a t rencontre :" & e.Message) End Try End Sub End Class End Namespace

V - L'objet Command
Une fois la connexion vers une base de donnes effectue, vous pouvez excuter une requte et rcuprer son rsultat en utilisant l'objet Command. Contrairement au fonctionnement des ADO o il tait possible d'excuter une requte sans utiliser l'objet Command, vous devez dsormais systmatiquement le faire. La cration d'un objet Command ncessite l'instanciation d'un objet SqlCommand. Cet objet expose diffrentes mthodes Execute utiliser selon le rsultat attendu : La mthode ExecuteReader peut tre utilise pour rcuprer un jeu d'enregistrement et retourne un objet DataReader ; La mthode ExecuteScalar rcupre une valeur unitaire ; La mthode ExecuteNonQuery excute une commande ne retournant pas de lignes.
'Exemple d'utilisation d'un objet Command Imports System Imports System.Data.SqlClient Imports System.IO Namespace ExempleAdoNetVBNET Public Class CommandeSQL Public Shared Sub Main() Dim strConnexion As String = "Data Source=localhost; Integrated Security=SSPI;" + "Initial Catalog=Northwind" Dim strRequete As String = "INSERT INTO Region VALUES (5,'Sud')" Try -5Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 leduke. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://dotnet.developpez.com/articles/ado1/vbnet/

ADO.NET : Connection, Command et DataReader avec VB.NET par leduke zoom61 Dim oConnection As New SqlConnection(strConnexion) Dim oCommand As New SqlCommand(strRequete, oConnection) oConnection.Open() oCommand.ExecuteNonQuery() oConnection.Close() Catch e As Exception Console.WriteLine(("L'erreur suivante a t rencontre :" + e.Message)) End Try End Sub 'Main End Class 'CommandeSQL End Namespace 'ExempleAdoNetVBNET

VI - L'objet DataReader
L'objet DataReader permet de rcuprer d'une source de donnes un flux en lecture seule en avant seulement (read only, forward only). Il rsulte de l'excution de la mthode ExecuteReader sur un objet Command. L'objet DataReader ne stocke en mmoire qu'une seule ligne la fois, permettant ainsi d'augmenter les performances d'une application et d'en rduire la charge. Il est recommand d'utiliser cet objet si : Vous n'avez pas besoin de raliser un cache des donnes ; Vous traitez un jeu d'enregistrements trop importants pour tre stock en mmoire ; Vous souhaitez accder des donnes rapidement en lecture seule en avant seulement.

Comme l'objet DataReader a t conu pour accder aux donnes selon un mode connect, il ne peut tre transmis entre diffrents tiers applicatifs ce que ralisait un Recordset dconnect. Par dfaut, un DataReader charge une ligne entire en mmoire chaque appel de la mthode Read. Il est possible d'accder aux valeurs de colonnes soit par leurs noms soit par leurs rfrences ordinales. Une solution plus performante est propose permettant d'accder aux valeurs dans leurs types de donnes natifs (GetInt32, GetDouble, GetString .). Par exemple si la premire colonne de la ligne indice par 0 est de type int, alors il est possible de la rcuprer l'aide de la mthode GetInt32 de l'objet DataReader.
Dim iColonne As Integer iColonne = oDataReader.GetInt32(0)

La mthode Close ferme un objet DataReader. Prcisons que si l'objet Command utilis contient des paramtres en sortie ou des valeurs de retour, ils ne pourront tre rcuprs qu' l'issue de la fermeture du DataReader. Pour augmenter les performances, il est parfois ncessaire de soumettre plusieurs requtes la fois. L'objet DataReader rpond ce besoin avec la mthode NextResult permettant de passer d'un jeu d'enregistrement un autre. Pour les habitus des ADO, cette mthode est quivalente au NextRecordset. Aprs vous avoir prsent les principales mthodes de l'objet DataReader, regardons plus prcisment leurs mises en uvre l'aide d'un exemple d'extraction de donnes.
' Exemple d'extraction de donnes avec l'objet DataReader Imports System Imports System.Data.SqlClient Imports System.IO Namespace ExempleAdoNetVBNET Public Class CommandeSQL Public Shared Sub Main() Dim strConnexion As String = "Data Source=localhost; Integrated Security=SSPI;" + "Initial Catalog=Northwind" -6Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 leduke. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://dotnet.developpez.com/articles/ado1/vbnet/

ADO.NET : Connection, Command et DataReader avec VB.NET par leduke zoom61 Dim strRequete As String = "SELECT CategoryID, CategoryName FROM Categories;" + "SELECT EmployeeID, LastName FROM Employees" Try Dim oConnection As New SqlConnection(strConnexion) Dim oCommand As New SqlCommand(strRequete, oConnection) oConnection.Open() Dim oReader As SqlDataReader = oCommand.ExecuteReader() Do Console.WriteLine(ControlChars.Tab + "{0}" + ControlChars.Tab + "{1}", oReader.GetName(0), oReader.GetName(1)) While oReader.Read() Console.WriteLine(ControlChars.Tab + "{0}" + ControlChars.Tab + "{1}", oReader.GetInt32(0), oReader.GetString(1)) End While Loop While oReader.NextResult() oReader.Close() oConnection.Close() Catch e As Exception Console.WriteLine(("L'erreur suivante a t rencontre :" + e.Message)) End Try End Sub 'Main End Class 'CommandeSQL End Namespace 'ExempleAdoNetVBNET

Ce qui donne l'excution le rsultat suivant :

-7Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 leduke. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://dotnet.developpez.com/articles/ado1/vbnet/

ADO.NET : Connection, Command et DataReader avec VB.NET par leduke zoom61

VII - Comment appeler une procdure stocke ?


Voyons maintenant comment appeler une procdure stocke en utilisant les objets Command et la collection Parameters. Les procdures stockes sont un ensemble d'ordre SQL compils sur un moteur SGBD. Grce aux procdures stockes, il est possible de centraliser l'ensemble du code SQL de votre application un seul endroit, ce qui en facile la maintenance. D'autre part, une procdure stocke est plus performante qu'une requte dynamique dont le plan d'excution et la compilation doivent tre effectus par le moteur SGBD avant toute excution. L'utilisation de la collection Parameters de l'objet Command permet de dfinir explicitement les paramtres en entre et en sortie ainsi que le code retour d'une procdure stocke. Tout d'abord informons l'objet Command du type de commande traiter via la proprit CommandType ; et donnonslui la valeur StoredProcedure.
'Dfinition du type de commande oCmd.CommandType = CommandType.StoredProcedure

Dfinissons ensuite chacun des paramtres en utilisant la mthode Add de la collection Parameters (dont l'un des prototypes est dcrit ci-dessous). Description Nom du paramtre Type de donnes Taille de la colonne Nom de la colonne source Type string SqlDbType int string Exemple @nom SqlDbType.Char 25 nom

' Cration d'un paramtre en entre Dim oParam As SqlParameter = oCmd.Parameters.Add("@nom", SqlDbType.Char, 25, Nom) oParam.Value = "John" ' Cration d'un paramtre retour Dim oParam As SqlParameter = oCmd.Parameters.Add("ReturnValue", SqlDbType.Int) oParam.ParameterDirection = ParameterDirection.ReturnValue

Prcisons : Qu'il est ncessaire d'affecter la proprit Value de l'objet Parameter une valeur pour les paramtres qui le ncessitent ; Qu'il faut dcrire explicitement le type de paramtres via la proprit ParameterDirection de l'objet Parameter (sauf pour les paramtres en entre). Celle-ci peut prendre l'une des valeurs suivantes : Input, InputOutput, Output ou ReturnValue.

Regardons un exemple implmentant l'excution de la procdure stocke GetCustomerOrders de la base Northwind .


' Exemple d'appel une procedure stocke Imports System Imports System.Data.SqlClient Imports System.Data Imports System.IO Namespace ExempleAdoNetVBNET Public Class SQLProcStock Public Shared Sub Main()

-8Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 leduke. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://dotnet.developpez.com/articles/ado1/vbnet/

ADO.NET : Connection, Command et DataReader avec VB.NET par leduke zoom61 Dim strConnexion As String = "Data Source=localhost; Integrated Security=SSPI;" + "Initial Catalog=Northwind" Dim strProcedureStockee As String = "GetCustomerOrders" Try Dim oConnection As New SqlConnection(strConnexion) Dim oCommand As New SqlCommand(strProcedureStockee, oConnection) oCommand.CommandType = CommandType.StoredProcedure Dim oParam As SqlParameter = oCommand.Parameters.Add("@CustomerName", SqlDbType.NVarChar, 50, "CustomerName") oParam.Value = "France restauration" oConnection.Open() Dim oReader As SqlDataReader = oCommand.ExecuteReader() Console.WriteLine(ControlChars.Tab + "{0}" + ControlChars.Tab + "{1}" + ControlChars.Tab + "{2}" + ControlChars.Tab + "{3}", oReader.GetName(0), oReader.GetName(3), oReader.GetName(4), oReader.GetName(5)) While oReader.Read() Console.WriteLine(ControlChars.Tab + "{0}" + ControlChars.Tab + "{1}" + ControlChars.Tab + "{2}" + ControlChars.Tab + "{3}", oReader.GetInt32(0), oReader.GetString(3), oReader.GetDecimal(4), oReader.GetInt16(5)) End While oReader.Close() oConnection.Close() Catch e As Exception Console.WriteLine(("L'erreur suivante a t rencontre :" + e.Message)) End Try End Sub 'Main End Class 'SQLProcStock End Namespace 'ExempleAdoNetVBNET

Une fois le code excut, la liste suivante s'affiche :

-9Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 leduke. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://dotnet.developpez.com/articles/ado1/vbnet/

ADO.NET : Connection, Command et DataReader avec VB.NET par leduke zoom61

Conclusion Nous avons abord dans cet article quelques-uns des objets disponibles dans ADO.Net. et plus particulirement le mode connect propos par l'objet DataReader. Cet objet offre une solution performante pour accder rapidement des donnes et pour traiter des donnes dont la taille est trop importante pour tre stocke en mmoire.

- 10 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2013 leduke. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://dotnet.developpez.com/articles/ado1/vbnet/