【问题标题】:"Nullable" property for ADOX table column?ADOX 表列的“可空”属性?
【发布时间】:2012-05-30 22:29:41
【问题描述】:

我正在尝试使用 C# 创建一个 Access 文件 (.mdb)。我正在从 SQL 中为遗留进程导出数据。我得到它的工作,我面临的唯一问题是将列设置为可为空。

这是我所拥有的(为简洁起见,删除了大多数列):

private void CreateAndExportLegacyFile(DataTable data, string exportFilename)
{
    var connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;";
    connectionString += "Data Source=" + exportFilename + ";Jet OLEDB:Engine Type=5";

    var catalog = new Catalog();
    catalog.Create(connectionString);

    var table = new Table { Name = "Main" };

    #region Column mapping
    table.Columns.Append("ID", DataTypeEnum.adVarWChar, 50);
    table.Columns.Append("FIRST", DataTypeEnum.adVarWChar, 50);
    table.Columns.Append("LAST", DataTypeEnum.adVarWChar, 50);
    #endregion

    foreach (Column column in table.Columns)
    {
        if (column.Name != "ID") column.Properties["Nullable"].Value = true;
    }

    catalog.Tables.Append(table);

    Marshal.FinalReleaseComObject(table);
    Marshal.FinalReleaseComObject(catalog.Tables);
    Marshal.FinalReleaseComObject(catalog.ActiveConnection);
    Marshal.FinalReleaseComObject(catalog);
}

尝试设置“Nullable”属性时出现以下错误:“在与请求的名称或序号对应的集合中找不到项目。”

我发现是否使用Required 或Nullable 的报告相互矛盾,但我都尝试了两者并得到相同的结果。

知道为什么我不能设置可空属性吗?在拉取数据时,我可能只是懒惰,默认空值是空白,但如果可能的话,我想避免这种情况。

编辑:正如 Hans 在评论中提到的,我不得不改用 Attributes 属性:

if (column.Name != "ID") column.Attributes = ColumnAttributesEnum.adColNullable;

【问题讨论】:

标签: c# .net-4.0 oledb jet adox


【解决方案1】:

Hans Passant 在评论中回答了这个问题,但从未将其添加为答案。现在这样做以将其标记为已回答。不得不使用 Attributes 属性:

if (column.Name != "ID") column.Attributes = ColumnAttributesEnum.adColNullable;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-11
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 2017-02-05
    • 1970-01-01
    相关资源
    最近更新 更多