编程语言
首页 > 编程语言> > c#-ADOX表列的“空”属性?

c#-ADOX表列的“空”属性?

作者:互联网

我正在尝试使用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的报告相互冲突,但是我尝试了两者,并获得了相同的结果.

知道为什么我无法设置nullable属性吗?我可能很懒,在提取数据时默认将null设置为空格,但是如果可能的话,我希望避免这种情况.

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

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

解决方法:

汉斯·帕桑(Hans Passant)在评论中回答了此问题,但从未将其添加为答案.现在这样做以将其标记为已回答.不得不使用Attributes属性:

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

标签:jet,c,net-4-0,oledb,adox
来源: https://codeday.me/bug/20191101/1982346.html