如何检查MS Access数据库中是否存在指定的列?

时间:2012-02-24 18:13:40

标签: c#

我需要我的程序检查MS Access 2000数据库中是否存在指定的列,如果没有 - 添加它。我使用.NET Framework 2.0 我尝试使用oleDbConnection.GetSchema()方法,但无法在元数据中找到列名(我真的不是专业人士,呵呵)和msdn上的任何规范。 我将不胜感激任何帮助。

感谢您的回答。 这是我在我的代码中使用的解决方案:

bool flag = false; string[] restrictions = new string[] { null, null, mytable };
DataTable dtColumns = oleDbConnection1.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Columns, restrictions);
foreach (DataRow row in dtColumns.Rows) 
{ 
    if (mycolumnname==(string)row["COLUMN_NAME"]) flag = true;
}

1 个答案:

答案 0 :(得分:0)

这是代码,是我的o / r-mapper的一部分。你不能使用它,因为它取决于其他类,但我希望你得到的图片。

定义像这样的限制

string[] restrictions = new string[] { null, null, tableName };

这将从表中检索列

private void RetrieveColumnInfo(OleDbConnection cnn, TableSchema tableSchema,
          string[] restrictions, Func<string, string> prepareColumnNameForMapping)
{
    using (DataTable dtColumns = 
                 cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, restrictions)) {
        string AutoNumberColumn = RetrieveAutoNumberColumn(cnn, tableSchema);
        foreach (DataRow row in dtColumns.Rows) {
            var col = new TableColumn();
            col.ColumnName = (string)row["COLUMN_NAME"];
            try {
                col.ColumnNameForMapping =
                    prepareColumnNameForMapping(col.ColumnName);
            } catch (Exception ex) {
                throw new UnimatrixExecutionException(
                    "Error in delegate 'prepareColumnNameForMapping'", ex);
            }
            col.ColumnAllowsDBNull = (bool)row["IS_NULLABLE"];
            col.ColumnIsIdentity = col.ColumnName == AutoNumberColumn;
            DbColumnFlags flags = (DbColumnFlags)(long)row["COLUMN_FLAGS"];
            col.ColumnIsReadOnly =
                col.ColumnIsIdentity ||
                (flags & (DbColumnFlags.Write | DbColumnFlags.WriteUnknown)) ==
                                                               DbColumnFlags.None;
            if (row["CHARACTER_MAXIMUM_LENGTH"] != DBNull.Value) {
                col.ColumnMaxLength = (int)(long)row["CHARACTER_MAXIMUM_LENGTH"];
            }
            col.ColumnDbType = GetColumnDbType((int)row["DATA_TYPE"]);
            col.ColumnOrdinalPosition = (int)(long)row["ORDINAL_POSITION"];
            GetColumnDefaultValue(row, col);

            tableSchema.ColumnSchema.Add(col);
        }
    }
}