Joh*_*aka 4 c# oledb jet .net-4.0 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);
}
Run Code Online (Sandbox Code Playgroud)
尝试设置“Nullable”属性时出现以下错误:“在与请求的名称或序号相对应的集合中找不到项目。”
我发现关于是否使用 Required 或 Nullable 的报告相互矛盾,但我已经尝试了这两种方法并得到相同的结果。
知道为什么我不能设置 nullable 属性吗?在提取数据时,我可能只是懒惰,默认空值为空格,但如果可能的话,我想避免这种情况。
编辑:正如汉斯在评论中提到的,我不得不改用 Attributes 属性:
if (column.Name != "ID") column.Attributes = ColumnAttributesEnum.adColNullable;
Run Code Online (Sandbox Code Playgroud)
Hans Passant 在评论中回答了这个问题,但从未将其添加为答案。现在这样做以将其标记为已回答。必须使用 Attributes 属性:
if (column.Name != "ID") column.Attributes = ColumnAttributesEnum.adColNullable;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3972 次 |
最近记录: |