Bonjour,

Je bloque sur la manière de laquelle importer un fichier texte dans un tableau Access (.accdb).

Dans un premier temps je récupère les informations sur le fichier texte (nombre de colonnes et nombre de lignes).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
string[] allFileLines = File.ReadAllLines(fileLocation);
int fileLines = allFileLines.Length;
int fileColumns = allFileLines[0].Split('\t').Length;
Ensuite je crée une table dans ma base Access pour y importer le fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
dbCommand.CommandText = "CREATE TABLE " + tblName;
dbConnection.Open();
dbCommand.ExecuteNonQuery();
Le tableau étant vide j'y écris l’entête du fichier texte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
for (int fileColumnName = 0; fileColumnName < fileColumns; fileColumnName++)
{
  dbCommand.CommandText = "ALTER TABLE " + tblName + " ADD COLUMN " + fileHeader[fileColumnName] + " TEXT(255)";
  dbCommand.ExecuteNonQuery();
}
Je définie ensuite 3 string contenant chacun les informations pour ma requête SQL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int fieldImportLoop = 0; fieldImportLoop < fileColumns; fieldImportLoop++)
{
  importFieldName[fieldImportLoop] = "[" + fileHeader[fieldImportLoop] + "]";
  fieldNames = fieldNames + ", " + importFieldName[fieldImportLoop];
  importFieldValue[fieldImportLoop] = "@" + fileHeader[fieldImportLoop];
  fieldValues = fieldValues + ", " + importFieldValue[fieldImportLoop];
  realFieldValue[fieldImportLoop] = '\u0022' + fileLinesSplit[fieldImportLoop] + '\u0022';
  realValues = realValues + ", " + realFieldValue[fieldImportLoop];
}          
 
fieldNames = "(" + fieldNames.Substring(2) + ")";
fieldValues = "(" + fieldValues.Substring(2) + ")";
realValues = realValues.Substring(2);
Ce qui donne quelque chose comme cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
fieldNames => ([SOCIETE], [CIV], [NOM], etc...)
fieldValues => (@SOCIETE, @CIV, @NOM, etc...)
realValues => "ENTREPRISE MACHIN", "MONSIEUR", "MACHIN", etc...
Maintenant je souhaiterais importer ligne par ligne mon fichier texte dans ma base Access dans mon tableau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
string dbCommandString = "INSERT INTO [" + tblName + "]" + fieldNames + " VALUES " + fieldValues;
C'est maintenant que j'ai un problème, sachant que mes fichiers n'ont jamais la même structure càd nombre de colonnes comment je peux procéder pour avoir un "Parameters.addWithValue" dynamique ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
dbCommand.Parameters.AddWithValue("@Champ1", "ValeurCamp1");
En théorie faudrait que j'écrive une ligne comme au dessus par Champ.

Si quelqu'un pourrait me donner une astuce de comment faire, ça serait super sympas.

CrazyNoun