如何获得“一般”?信息“required"从Access列(Access 2003)使用c#

本文关键字:Access 使用 2003 quot 一般 何获得 信息 required | 更新日期: 2023-09-27 18:18:18

在我对Access数据库表进行更新之前,我想知道所需的每一列是否都已填写。

所以我需要知道一列是否需要是或否

在Access的设计表模式中,我在"General"选项卡中看到了所需的信息。

但是我如何用c#代码检索这些信息?所以我不是在寻找"AllowDBNull"布尔值,而是在"General"选项卡中寻找参数"required"。

我使用的是Visual Studio 2005和Access 2003。

如何获得“一般”?信息“required"从Access列(Access 2003)使用c#

我这里有一个代码,它也做其他事情。我通过使用模式表检索列信息:

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"];
        col.ColumnNameForMapping = prepareColumnNameForMapping(col.ColumnName);
        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);
    }
}

将此用于限制参数:

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

注意:我在这个例子中使用的一些类型和方法是我自己的,在其他地方定义的,所以如果你不根据你的需要调整它,这段代码将无法工作。


如果你有一个数据集,你也可以从system . data . dataccolumn . allowdbnull属性(未测试)中检索信息

考虑创建一个查询,显示将所需列设置为空值的行。然后,从c#的调用例程中,您可以打开查询。