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
- 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).Row
Cette 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
Class
Voici, 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
If
Le 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
Next
N'oubliez pas d'inclure cette ligne en début de fichier:
Imports
System.Data.Common
Nous 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 Function
Il 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