Developpez.com

Plus de 2 000 forums
et jusqu'à 5 000 nouveaux messages par jour

FAQ VB.NETConsultez toutes les FAQ

Nombre d'auteurs : 36, nombre de questions : 239, dernière mise à jour : 24 mai 2015  Ajouter une question

 

Cette FAQ a été réalisée pour répondre aux questions les plus fréquemment posées sur le forum Développement DotNET

Je tiens à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle contient sont correctes. Les auteurs font le maximum, mais l'erreur est humaine. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, lisez ceci.

Sur ce, je vous souhaite une bonne lecture.


SommaireADO.NET (16)
précédent sommaire suivant
 

Cette définition est tirée de MSDN

ADO.NET propose un accès cohérent à des sources de données telles que Microsoft SQL Server, ainsi qu'à des sources de données exposées via OLE DB et XML. Des applications grand public de partage de données peuvent utiliser ADO.NET pour se connecter à des sources de données et extraire, manipuler et mettre à jour des données.

Mis à jour le 30 novembre 2013 Jérôme Lambert

Le .NET Framework dispose de plusieurs namespaces permettant de se connecter à divers SGBD.

  • System.Data.SqlClient pour SQL Server ;
  • System.Data.Odbc pour les SGBD fournissant un pilote ODBC ;
  • Oracle.DataAcess (de ORACLE) pour ORACLE. Disponible en installant Oracle Data Provider .NET (ODP .NET) ;
  • System.Data.Oracle.Client (de Microsoft) pour Oracle ;
  • System.Data.OleDb pour tous les SGBD ayant un fournisseur OLE DB.

Mis à jour le 1er novembre 2013 abelman

Voici un exemple pour SQL Server

Code vb.net : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Imports System.Data.SqlClient 
  
Class adobasic 
  
    Public Shared Sub Main() 
  
    Try 
        ' Chaîne de connexion 
        Dim connectString As String = "database=test;server=am01;User ID=samfisher;pwd=echelon" 
        ' Objet connection 
        Dim connection As SqlConnection = new SqlConnection(connectString) 
        'Ouverture 
        connection.Open() 
        ' Fermeture 
        connection.Close() 
    Catch ex As Exception 
        System.Diagnostics.Debug.WriteLine(ex.ToString()) 
    End Try 
  
    End Sub 
  
End Class

Mis à jour le 1er novembre 2013 abelman

On utilise les objets Command et DataReader.
Exemple avec SQL Server

Code vb.net : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Trace.Listeners.Add(New TextWriterTraceListener(Console.Out)) 
Dim connectString As String = "database=test;server=SRV01;User ID=samfisher;pwd=echelon" 
Dim connection As SqlConnection = New SqlConnection(connectString) 
connection.Open() 
Dim command As SqlCommand = New SqlCommand("SELECT * FROM usr_contract", connection) 
Dim reader As SqlDataReader = command.ExecuteReader 
Dim row As Object() = Nothing 
While reader.Read 
    If row Is Nothing Then 
    row = New Object(reader.FieldCount) {} 
    End If 
    reader.GetValues(row) 
    Dim i As Integer = 0 
    While i < row.GetLength(0) 
        If Not row(i) Is Nothing AndAlso Not (row(i) Is DBNull.Value) Then 
            Trace.Write(row(i).ToString()) 
        Else 
            Trace.Write("NULL") 
        End If 
        If i < row.GetUpperBound(0) Then 
            Trace.Write(" | ") 
        End If 
        i = i + 1 
    End While 
    Trace.Write(vbCrLf) 
End While 
reader.Close() 
connection.Close()
Consulter les cours sur ADO.NET pour plus d'informations

Mis à jour le 1er novembre 2013 abelman

On utilise la méthode ExecuteNonQuery de l'objet Command.
Exemple avec SqlServer

Code vb.net : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
' Chaîne de connexion 
Dim connectString As String = "database=derivatives;server=SRV01;User ID=samfisher;pwd=echelon" 
' Objet connection 
Dim connection As SqlConnection = new SqlConnection(connectString) 
' Ouverture 
connection.Open() 
' Objet Command 
Dim command As SqlCommand = new SqlCommand("UPDATE usr_contract set ctr_n = ctr_n + 1", connection) 
' Execution 
Dim affectedrows As Integer = command.ExecuteNonQuery() 
Console.WriteLine("Nombre de lignes affectées {0}", affectedrows) 
' Fermeture connection 
connection.Close()
Consulter la page cours sur ADO.NET pour plus d'informations.

Mis à jour le 1er novembre 2013 abelman

Pour exécuter une requête contenant une quote simple, il faut utiliser les requêtes paramétrées.
Il est néanmoins possible d'exécuter la requête en doublant les quotes de la requête.

Code vb.net : Sélectionner tout
1
2
3
4
Dim sql As String = "SELECT * FROM pasta WHERE name = 'aujourd''hui'" 
' Ou 
Dim name As String = "aujourd'hui" 
sql = "SELECT * FROM pasta WHERE name = " & name.Replace("'", "''")

Mis à jour le 12 février 2014 abelman

Il est possible de passer des paramètres à des requêtes SQL.
Exemple avec SQL Server

Code vb.net : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System.Data.SqlClient; 
Imports System.Data.SqlClient 
  
' Chaîne de connexion 
Dim connectString As String = "database=equities;server=JV01;User ID=samfisher;pwd=echelon" 
' Objet connection 
Dim connection As SqlConnection = New SqlConnection(connectString) 
' Ouverture 
connection.Open() 
' Objet Command 
Dim command As SqlCommand = New SqlCommand("SELECT * FROM usr_contract " & _ 
"WHERE ctr_ref = @contract AND ctr_exg_ref = @exg", _ 
connection) 
' Paramètres 
command.Parameters.Add(New SqlParameter("@contract", SqlDbType.VarChar, 5)) 
command.Parameters("@contract").Value = "FTE" 
command.Parameters.Add(New SqlParameter("@exg", SqlDbType.VarChar, 8)) 
command.Parameters("@exg").Value = "SBF" 
' Object datareader 
Dim reader As SqlDataReader = command.ExecuteReader() 
Dim row As Object() 
While reader.Read() 
  
    If row Is Nothing Then 
    row = New Object(reader.FieldCount - 1) {} 
    End If 
    reader.GetValues(row) 
    For i As Integer = 0 To row.GetLength(0) - 1 
        If Not row(i) Is DBNull.Value Then 
            Console.Write(row(i)) 
        Else 
            Console.Write("NULL") 
        End If 
        If i < row.GetUpperBound(0) Then 
            Console.Write(" | ") 
        End If 
    Next 
    Console.WriteLine() 
End While 
' Fermeture reader 
reader.Close() 
' Fermeture base 
connection.Close()
Consulter les cours sur ADO.NET pour plus d'informations

Mis à jour le 11 février 2014 abelman

Pour pouvoir exécuter une procédure stockée, vous devez utiliser un objet IDbCommand
et indiquer à sa propriété CommandType que vous désirez utiliser une procédure stockée

Code vb.net : Sélectionner tout
1
2
3
4
5
6
7
' Exemple pour SQL SERVER 
' Objet SqlCommand 
Dim cmd As SqlCommand = New SqlCommand() 
' On indique que l'on souhaite utiliser une procédure stockée 
cmd.CommandType = CommandType.StoredProcedure 
' On donne le nom de cette procédure stockée 
cmd.CommandText = "CustOrderHist"
Plus d'informations sur les différents cours ADO.NET (voir liens plus bas)

Mis à jour le 1er novembre 2013 abelman

En utilisant un DataSet et sa méthode WriteXml, vous avez la possibilité d'écrire le contenu d'une table dans un fichier XML.

Code vb.net : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Imports System.Data.SqlClient 
  
Public Class EcrireXML 
  
    Public Shared Sub Main() 
  
        ' Création de la chaîne de connexion 
        Dim connectString As String = "Server=SRV01;Database=Northwind;User ID=samfisher;Password=echelon" 
        ' Création de la connexion 
        Dim connection As SqlConnection = New SqlConnection(connectString) 
  
        ' Création du SqlDataAdapter 
        Dim da As SqlDataAdapter = New SqlDataAdapter("Select * from Customers", connection) 
  
        ' Création d'un DataSet 
        Dim ds As DataSet = New DataSet 
  
        ' Remplissage du DataSet avec le SqlDataAdapter 
        da.Fill(ds, "Customers") 
  
        ' Écriture du fichier XML au moyen de la méthode WriteXml 
        ds.WriteXml("E:\Temp\TestXml.xml") 
  
    End Sub 
  
End Class
Voici, après traitement, le contenu du fichier TestXml.xml :

Code xml : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" standalone="yes" ?> 
  <NewDataSet> 
  <myTable> 
    <CustomerID>ALFKI</CustomerID> 
    <CompanyName>Alfreds Futterkiste</CompanyName> 
    <ContactName>Maria Anders</ContactName> 
    <ContactTitle>Sales Representative</ContactTitle> 
    <Address>Obere Str. 57</Address> 
    <City>Berlin</City> 
    <PostalCode>12209</PostalCode> 
    <Country>Germany</Country> 
    <Phone>030-0074321</Phone> 
    <Fax>030-0076545</Fax> 
</myTable>

Mis à jour le 11 février 2014 abelman

Ce code permet un export rapide de données vers une feuille Excel grâce à une requête ou une procédure stockée. Il devient intéressant si les données à exporter sont volumineuses (plusieurs milliers de lignes).

L'ajout de la référence « Microsoft Excel 11.0 Object Library » est nécessaire.

Code vb.net : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Imports Microsoft.Office.Interop 
  
' Dans un événement clic de bouton par exemple 
Dim xlApp As Excel.Application 
  
Try 
    xlApp = GetObject(, "excel.application") 
Catch 
    xlApp = New Excel.Application 
Finally 
    xlApp.Visible = False 
End Try 
  
' Ajout d'une page et sélection 
Dim xsTransfert As Excel.Worksheet = xlApp.Workbooks.Add.ActiveSheet 
  
Try 
    ' Ici on crée la chaine de connexion 
    ' (on se connecte à SQL Server dans notre exemple) 
    With xsTransfert.QueryTables.Add(Connection:= _ 
            "ODBC;DRIVER=SQL Server;SERVER= Nom_Server;Integrated 
            Security=SSPI;" & _ 
            "APP=Microsoft® Query;DATABASE= Nom_Base;Trusted_Connection=Yes", _ 
          Destination:=xsTransfert.Range("A1")) 
  
        .CommandText = "Nom_Procedure_stockée" ' ou requête SELECT 
        .Name = "nom_feuille_excel" 
        .FieldNames = True 
        .RowNumbers = True 
        .FillAdjacentFormulas = False 
        .PreserveFormatting = True 
        .RefreshOnFileOpen = False 
        .BackgroundQuery = True 
        .RefreshStyle = Excel.XlCellInsertionMode.xlOverwriteCells 
        .SavePassword = False 
        .SaveData = False 
        .AdjustColumnWidth = True 
        .RefreshPeriod = 0 
        .PreserveColumnInfo = True 
        .Refresh(BackgroundQuery:=False) 
    End With 
  
    ' Affichage 
    xlApp.Visible = True 
Catch ex As Exception 
    MessageBox.Show(ex.Message) 
End Try

Mis à jour le 1er novembre 2013 HULK

Les classes xxxCommand (sous entendu SqlCommand, OleDbCommand, etc.) possède la propriété CommandTimeout pour définir le temps maximum que pourra prendre la requête.

Code vb.net : Sélectionner tout
1
2
3
4
5
6
7
8
9
Dim maCommand As SqlCommand = New SqlCommand("SELECT * FROM MaTable")  
' Par défaut, CommandTimeout vaut 30 secondes 
  
Console.WriteLine("Temps avant Timeout : {0}", maCommand.CommandTimeout)  
' Met le Timeout à 10 secondes 
maCommand.CommandTimeout = 10 
Console.WriteLine("Temps avant Timeout : {0}", maCommand.CommandTimeout) 
' Permet de ne pas générer de Timeout 
maCommand.CommandTimeout = 0

Mis à jour le 1er novembre 2013 Jérôme Lambert

Mode connecté

Ce mode permet à un client de se connecter à un serveur de base de données et tant que le client ne fermera pas la connexion, le serveur se souviendra de lui. Lorsque l'on désirera récupérer des informations (SELECT), on les recevra au compte-goutte, c'est-à-dire une par une.

Mode déconnecté

Le but de ce mode est de récupérer en un bloc une portion de la base de données afin d'effectuer des traitements en local sur la machine du client. On aura donc une ouverture de connexion à la base de données, la récupération en un seul bloc du résultat puis la fermeture de la connexion.

Mis à jour le 1er novembre 2013 Jérôme Lambert

Allez dans le menu Tools et sélectionnez Connect to Database.

Vous pourrez tester une connexion à n'importe quel type de base de données en spécifiant le type de source de données, le provider, le nom du serveur ou du fichier, le mot de passe, etc.

Mis à jour le 1er novembre 2013 Jérôme Lambert

Visitez le site regroupant la liste des chaînes de connexion des différents SGBD : http://www.connectionstrings.com/

Mis à jour le 1er novembre 2013 Jérôme Lambert

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsable bénévole de la rubrique Microsoft DotNET : Hinault Romaric -