Vérifier si la colonne existe dans la table OleDb

J’essaie de vérifier si une colonne existe et si ce n’est pas le cas, ajoutez-la. J’ai essayé plusieurs solutions, dont celle-ci , mais la syntaxe n’est pas correcte pour Access db.

C’est ce que j’ai jusqu’à présent:

public void Update(ssortingng task, ssortingng dbPath, ssortingng tableName = "Frames") { OleDbConnection db = new OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;data source=" + dbPath); db.Open(); OleDbCommand command = db.CreateCommand(); command.CommandText = "COL_LENGTH('Frames','SetNumber')"; Debug.WriteLine(command.ExecuteReader()); /* ssortingng[] ressortingctions = new ssortingng[] {null, null, tableName}; DataTable dtColumns = db.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, ressortingctions); foreach (DataColumn column in dtColumns.Columns) { Debug.WriteLine(column.ColumnName); }*/ } 

J’ai aussi essayé d’utiliser GetOleDbSchemaTable mais il ne renvoie pas la bonne table ou quelque chose d’autre. Qu’est-ce que je rate?

Pour vérifier si une colonne existe dans un datatable, vous pouvez utiliser la méthode GetSchema de OleDbConnection.

 public void Update(ssortingng task, ssortingng dbPath, ssortingng colName, ssortingng tableName = "Frames") { using(OleDbConnection db = new OleDbConnection("........")) { db.Open(); var schema = db.GetSchema("COLUMNS"); var col = schema.Select("TABLE_NAME='" + tableName + " AND COLUMN_NAME='" + colName + "'" if(col.Length > 0) // Column exist else // Column doesn't exist } 

Votre approche avec GetOleDbSchemaTable est la voie à suivre. Chaque ligne de la table de schéma contient les informations d’une seule colonne de votre table et chaque colonne de la table de schéma en représente une propriété. Alors, parcourez les lignes de la table de schéma, pas les colonnes!

 foreach (DataRow row in dtColumns.Rows) { // <== dtColumns.Rows // (NOT dtColumns.Columns) string columnName = (string)row["COLUMN_NAME"]; .... } 

Votre approche fournit les noms de colonne de la table de schéma elle-même.