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).
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
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.
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.
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 :
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.
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 ?
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
Partager