C#でAccessファイル(.mdb)を作成しようとしています。レガシープロセス用にSQLからデータをエクスポートしています。私はそれを機能させました、私が直面している唯一の問題は列をnull許容に設定することです。
これが私が持っているものです(簡潔にするためにほとんどの列を削除しました):
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のどちらを使用するかについて矛盾するレポートを見つけましたが、両方を試したところ、同じ結果が得られました。
null許容プロパティを設定できない理由はありますか?データをプルするとき、私は怠惰でデフォルトのnullを空白にするかもしれませんが、可能であればそれを避けたいと思います。
編集:ハンスがコメントで述べたように、代わりに属性プロパティを使用する必要がありました:
if (column.Name != "ID") column.Attributes = ColumnAttributesEnum.adColNullable;