FAQ ASP.NET/VB.NET

FAQ ASP.NET/VB.NETConsultez toutes les FAQ
Nombre d'auteurs : 38, nombre de questions : 369, dernière mise à jour : 16 juin 2021
Sommaire→Travailler avec des données→ADO.NET→ADO.NET Divers- Comment fusionner 2 DataTables ?
- Comment récupérer une Row d'un DataSet via un index de DataView?
- Comment écrire le contenu de ma table dans un fichier XML ?
- Comment créer une base de données Access?
- Faut-il utiliser les DataReader ou les DataSet ?
- Comment éviter les erreurs dans l'écriture d'une chaîne de caractères?
- Comment vérifier qu'un provider est installé sur la machine?
- Comment énumérer les providers installés sur la machine?
- Comment éviter des accès inutiles à la base de données ?
- Comment vérifier qu'un DataSet est rempli ou non?
- Comment vérifier qu'une DataTable est remplie ou non?
Pour fusionner 2 DataTables, il faut les inclures dans un DataSet :
Dim dt1 As New DataTable("Test")
Dim dt2 As New DataTable("Test")
Dim ds As New DataSet
ds.Merge(dt1)
ds.Merge(dt2)ds.Table(0) représentera la table fusionné. Pour fusionner 2 DataTables il faut qu'elle aient le même nom, sinon une nouvelle table est ajoutée au DataSet.
Cette utilisation de la fonction merge du DataSet est ici décrite de mannière simpliste pour l'utilisation la plus courrante qui en est faite. Pour plus de détail sur cette fonction reportez-vous au cours d'ADO.NET.
Lien : Cours d'ADO.NET
Parfois, il est nécessaire de récupérer l'index d'un Row dans un DataTable en ne connaissant que l'index d'un Row du DataView (qui est différent suite à un tri
par exemple).
Voici comment faire:
dataview.Item(x).RowCette ligne retourne le Row du DataSet correspondant à l'index x du DataView.
En utilisant un DataSet et sa méthode WriteXml, vous avez la possibilité d'écrire le contenu d'une table dans un fichier XML.
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")
'Ecriture du fichier XML au moyen de la méthode WriteXml
ds.WriteXml("E:\Temp\TestXml.xml")
End Sub
End ClassVoici, après traitement, le contenu du fichier TestXml.xml :
<?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>Pour créer une base de données Access, il est possible d'utiliser le code suivant:
Dim Cat As ADOX.CatalogClass = New ADOX.CatalogClass
Cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName)Tout dépend le nombre de fois que vous devez utiliser les données provenant de votre base et ce que vous souhaitez en faire.
Si il s'agit d'une simple lecture des données, utilisez un DataReader car c'est ce que le DataSet utilise en interne pour se remplir.
Si vous devez accéder plusieurs fois à ces données et les modifier, utilisez un DataSet.
Il est conseillé d'utiliser l'objet SqlConnectionStringBuilder inclu dans le framework .NET 2.0.
Dim conStrbuilder As SqlConnectionStringBuilder = New SqlConnectionStringBuilder
With conStrbuilder
.DataSource = serverName
.UserID = uid
.Password = pwd
End With
Dim c As SqlConnection = New SqlConnection(conStrbuilder.ConnectionString)Il est possible de lister les providers installés sur une machine. En filtre sur cette liste, il est possible de voir si un provider est installé ou non.
If DbProviderFactories.GetFactoryClasses.Select("InvariantName='" + invariantName And "'").Length = 0 Then
Response.Write(invariantName + "n'existe pas")
End IfLe framework .NET 2.0 nous amène un objet très intéressant pour ce point. Ainsi, il existe une méthode statique GetFactoryClasses dans l'objet DbProviderFactories.
Comme on peut le voir dans le code qui suit, cette méthode renvoie une DataTable qu'il est possible de parcourir et encore d'utiliser cette DataTable pour afficher dans un composant de liste ou de grille.
Dim providerTable As DataTable = DbProviderFactories.GetFactoryClasses
For Each row As DataRow In providerTable.Rows
For Each col As DataColumn In providerTable.Columns
Response.WriteLine(col.ColumnName + ": " + row(col.ColumnName))
Next
NextN'oubliez pas d'inclure cette ligne en début de fichier:
Imports System.Data.CommonNous avons souvent des pages dont le contenu ne varient que de temps à autre. ASP.NET 2.0 amène la mise en cache d'une page et ce, de manière relativement simple. Effectivement, il suffit d'ajouter une directive au niveau de la page.
<%@ OutputCache Duration=600 VaryByParam=state SqlDependency="database:table" %>Que trouve-t-on dans cette directive? Qu'il s'agit de garder en cache l'information durant 10 minutes, et que les valeurs en cache doivent être rechargées si les données ont été modifiées durant les 10 minutes de mise en cache.
Il suffit de regarder si une ou plusieurs tables sont présentes dans ce DataSet.
public Function IsFilled(ByVal ds As DataSet) As Boolean
Return ds.Tables.Count > 0
End FunctionIl suffit de regarder si une ou plusieurs rows sont présentes dans cette DataTable.
Public Function IsFilled(ByVal dt As DataTable) As Boolean
Return dt.Rows.Count > 0
End Function


