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).
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 string[] allFileLines = File.ReadAllLines(fileLocation); int fileLines = allFileLines.Length; int fileColumns = allFileLines[0].Split('\t').Length;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 dbCommand.CommandText = "CREATE TABLE " + tblName; dbConnection.Open(); 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 for (int fileColumnName = 0; fileColumnName < fileColumns; fileColumnName++) { dbCommand.CommandText = "ALTER TABLE " + tblName + " ADD COLUMN " + fileHeader[fileColumnName] + " TEXT(255)"; dbCommand.ExecuteNonQuery(); }
Ce qui donne quelque chose comme cela :
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);
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
1
2
3 fieldNames => ([SOCIETE], [CIV], [NOM], etc...) fieldValues => (@SOCIETE, @CIV, @NOM, etc...) realValues => "ENTREPRISE MACHIN", "MONSIEUR", "MACHIN", etc...
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 string dbCommandString = "INSERT INTO [" + tblName + "]" + fieldNames + " VALUES " + fieldValues;
En théorie faudrait que j'écrive une ligne comme au dessus par Champ.
Code : Sélectionner tout - Visualiser dans une fenêtre à part dbCommand.Parameters.AddWithValue("@Champ1", "ValeurCamp1");
Si quelqu'un pourrait me donner une astuce de comment faire, ça serait super sympas.
CrazyNoun
Partager