2012-05-30 4 views
2

C#으로 Access 파일 (.mdb)을 만들려고합니다. 레거시 프로세스 용 SQL에서 데이터를 내보내고 있습니다. 내가 일하고있어, 내가 직면하고있는 유일한 문제는 nullable로 열을 설정합니다. 나는 "Null 허용"속성을 설정하려고 시도 할 때 다음과 같은 오류가 얻을ADOX 테이블 열에 "Nullable"속성이 있습니까?

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); 
} 

: "항목 요청에 해당하는 컬렉션에서 항목을 찾을 수 없습니다 여기

내가 (간결함을 위해 제거 대부분의 열)이 무엇 이름 또는 서수. "

필자는 Required 또는 Nullable 중 어떤 것을 사용할 것인지에 대한 충돌하는 보고서를 발견했지만 두 가지 모두 시도해 본 결과 동일한 결과를 얻었습니다.

nullable 속성을 설정할 수없는 이유는 무엇입니까? 나는 데이터를 가져올 때 빈 공간으로 디폴트 게으름과 null을 가질 수 있지만 가능한 경우이를 피하고 싶습니다.

편집 : 한스 코멘트에서 언급 한 바와 같이, 내가 대신 속성 속성을 사용했다 :

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

Attributes 속성을 사용하십시오. 세 번째 글 머리 기호 http://msdn.microsoft.com/en-us/library/windows/desktop/ms676554%28v=vs.85%29.aspx –

+0

@HansPassant - 감사합니다! 답변을 답변으로 추가하려면 동의로 표시하겠습니다. –

답변

3

한스 옆모습은 주석이 대답하지만 대답으로 추가되지 않습니다. 이것을 응답으로 표시하려면 지금하십시오. Attributes 속성을 사용해야했습니다.

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