FAQ VB.NETConsultez toutes les FAQ
Nombre d'auteurs : 37, nombre de questions : 240, dernière mise à jour : 12 mai 2018 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.
- 8.1. SQL Server (2)
- Qu'est-ce que ADO.NET ?
- Quelles classes utiliser pour me connecter à ma base de donnée ?
- Comment se connecter à une base de données ?
- Comment exécuter une requête SELECT ?
- Comment exécuter une requête non SELECT ?
- Comment exécuter une requête dont le texte comprend une quote simple ?
- Comment exécuter une requête paramétrée ?
- Comment puis-je exécuter une procédure stockée ?
- Comment écrire le contenu de ma table dans un fichier XML ?
- Comment transférer des données sous Excel rapidement ?
- Comment modifier le time out d'une requête ?
- Quelle est la différence entre les modes connecté et déconnecté ?
- Comment créer une connexion à une base de données via Visual Studio ?
- Quelle chaîne de connexion utiliser pour se connecter à une base de données ?
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.
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.
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 |
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() |
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() |
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("'", "''") |
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() |
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" |
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 |
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> |
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 |
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 |
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.
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.
Visitez le site regroupant la liste des chaînes de connexion des différents SGBD : http://www.connectionstrings.com/
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 çaLes 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 © 2024 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.