Je souhaite autoriser mon application à importer des données à partir de fichiers XLS
. Je le fais déjà avec CSV
fichiers et XML
fichiers, mais je voudrais ouvrir la portée pour les utilisateurs. J'ai des problèmes avec le chargement du fichier. Nous chargeons les fichiers (XLS
, CSV
, XML
) dans un ensemble de données et travaillons dessus à partir de là. Le code de chargement pour XLS
est inférieure àLecture d'un fichier XLS avec Microsoft Jet Engine
FileInfo fi = new FileInfo(filename);
//create and open a connection with the supplied string
OleDbConnection objOleDBConn;
objOleDBConn = new OleDbConnection(string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'", fi.FullName));
objOleDBConn.Open();
DataTable dt = objOleDBConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (dt == null || dt.Rows.Count == 0)
{
return;
}
string sheet = dt.Rows[0]["TABLE_NAME"].ToString();
//then read the data as usual.
OleDbDataAdapter objOleDBDa;
objOleDBDa = new OleDbDataAdapter(string.Format("select * from [{0}]",sheet), objOleDBConn);
objOleDBDa.Fill(data);
objOleDBConn.Close();
Alors mes données se charge OK, mais il semble définir les types de données de différentes colonnes, ce qui est un problème pour un de mes colonnes. C'est un champ de bit et nous avons choisi d'accepter False
, True
, Yes
, No
, Y
, et N
. Il y a du code qui transfère ceci dans un booléen plus tard. Cela fonctionne bien dans un fichier CSV
(pour lequel la chaîne de connexion est différente) mais dans un XLS
, si les 10 premières lignes sont dites FALSE
ou TRUE
, puis que le 11 dit YES
, alors je viens d'obtenir une entrée nulle. Je devine qu'il lit les premières entrées et détermine le type de données basé sur cela?
Question: Existe-t-il un moyen de désactiver le mécanisme qui identifie le type de données d'une colonne en fonction des premières entrées?
Vous pouvez essayer d'ajouter MaxScanRows = 1 aux propriétés étendues de la chaîne de connexion, puis avoir des champs de texte dans la première ligne de la feuille. Je n'ai jamais essayé cela mais cela pourrait fonctionner? – Tester101