Comment récupèrer plusieurs types de données dans un DataSet (string et int)

Signaler
Messages postés
4
Date d'inscription
dimanche 11 janvier 2004
Statut
Membre
Dernière intervention
1 février 2006
-
Messages postés
4
Date d'inscription
dimanche 11 janvier 2004
Statut
Membre
Dernière intervention
1 février 2006
-
Bonjour,
En ce moment, j'effectue une lecture d'une plage de cellules à partir d'un fichier excel en utilisant les interops et un dataset.
Il me reste toutefois un problème, car ma plage de cellule contient des nombres mais les entêtes sont des string.

Le dataset lis tout les doubles et les enregistrent mais pour ce qui est des string, la valeur exacte est remplacée par System.DBNull.

Je dois absolument récupèrer les cellules de la première ligne pour pouvoir choisir quelle colonne prendre lors de mon traitement.

Ma question : Peux on avoir dans un dataset plusieurs types de données enregistrés?


voilà le code de ma création du DataSet

public System.Data.DataSet RecupXls(string pathFichier, string nomFeuille, string plage)
{
try
{
OleDbConnection excelConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathFichier + ";Extended Properties='Excel 8.0;HDR=No;'");
OleDbCommand excelCommand = new OleDbCommand("SELECT * FROM [" + nomFeuille + "$"+plage+"]", excelConnection);
OleDbDataAdapter excelDataAdapter = new OleDbDataAdapter(excelCommand);
DataSet excelDataSet = new DataSet();

// récupération des données de la table
excelDataAdapter.Fill(excelDataSet, nomFeuille);

return excelDataSet;

}
catch(Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.ToString());
return null;
}


}

3 réponses

Messages postés
346
Date d'inscription
lundi 8 septembre 2003
Statut
Membre
Dernière intervention
3 septembre 2007
3
On peut avoir plusieurs type de données enregistré, mais aps sur une colonne,
un dataset, c'est un peu comme une base de données, avec des tables des liens et des types de données.

Pour ta question, si tu veux recupérer la premeire ligne de ton fichier excel, lance apres ta récupération un
ExecuteReader() pour lire la premeire ligne
Au lieu de faire un fill tu fais un truc du style:

OleDbConnection excelConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathFichier + ";Extended Properties='Excel 8.0;HDR=No;'");
OleDbCommand excelCommand = new OleDbCommand("SELECT * FROM [" + nomFeuille + "$"+plage+"]", excelConnection);
OleDbDataReader monReader;

excelconnection.Open();

monReader= excelcommand.ExecuteReader();

if( monReader.read())
{
// lecture des entetes de colonnes, il doit exister une propriété pour savoir combien de colonne sont présentes

}
monreader.close();
excelconnection.Close();
Messages postés
4
Date d'inscription
dimanche 11 janvier 2004
Statut
Membre
Dernière intervention
1 février 2006

je te remercie j'avais pas pensé à ça je vais essayer ta solution
Messages postés
4
Date d'inscription
dimanche 11 janvier 2004
Statut
Membre
Dernière intervention
1 février 2006

la solution ne marche pas , même probleme qu'avec le dataset, je pense que la seule solution c'est soit de forcer le type de données du dataSet, soit décomposer la plage en 2 sous plages