2015-01-09 2 views
2

두 테이블로 구성된 Access 데이터베이스를 만들려고합니다. 다음 메소드 내에서 System.Runtime.InteropServices.COMException이 88 행에 있습니다. 카탈로그 개체에 테이블을 추가하려고하면 예외가 발생합니다. 누군가 잘못 설명하고이를 해결하는 방법을 알려주세요.ADOX로 Access db 만들기

public bool CreateNewAccessDatabase(string fileName) 
    { 
     bool result = false; 

     ADOX.Catalog cat = new ADOX.Catalog(); 
     ADOX.Table provTable = new ADOX.Table(); 
     ADOX.Key provKey = new ADOX.Key(); 
     ADOX.Table locTable = new ADOX.Table(); 
     ADOX.Key locKey = new ADOX.Key(); 
     ADOX.Column provCol = new Column(); 
     ADOX.Column locCol = new Column(); 


     //Create the Province table and it's fields. 
     provTable.Name = "Provinces"; 
     provCol.Name = "id"; 
     provCol.Type = ADOX.DataTypeEnum.adInteger; 
     provTable.Columns.Append(provCol);    
     provTable.Columns.Append("name", ADOX.DataTypeEnum.adVarWChar, 4); 

     provKey.Name = "Primary Key"; 
     provKey.Columns.Append("id"); 
     provKey.Type = KeyTypeEnum.adKeyPrimary; 

     //Create the Locations table and it's fields 
     locTable.Name = "Locations"; 
     locCol.Name = "id"; 
     locCol.Type = ADOX.DataTypeEnum.adInteger; 
     locTable.Columns.Append(locCol); 
     locTable.Columns.Append("name", ADOX.DataTypeEnum.adVarWChar, 50); 
     locTable.Columns.Append("price", ADOX.DataTypeEnum.adVarWChar, 8); 

     locKey.Name = "Primary Key"; 
     locKey.Columns.Append("id"); 
     locKey.Type = KeyTypeEnum.adKeyPrimary; 

     try 
     { 
      cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + "; Jet OLEDB:Engine Type=5"); 

      // Must create database file before applying autonumber to column 
      provCol.ParentCatalog = cat; 
      provCol.Properties["AutoIncrement"].Value = true; 

      locCol.ParentCatalog = cat; 
      locCol.Properties["AutoIncrement"].Value = true; 

      cat.Tables.Append(provTable); // <<< Exception triggered here 
      cat.Tables.Append(locTable); 

      //Now Close the database 
      ADODB.Connection con = cat.ActiveConnection as ADODB.Connection; 
      if (con != null) 
       con.Close(); 

      result = true; 
     } 
     catch (Exception ex) 
     { 
      Debug.WriteLine(ex.StackTrace); 
      result = false; 
     } 
     cat = null; 
     return result; 
    } 

답변

1

당신은 ADOX.DataTypeEnum.adVarChar로 텍스트 필드를 선언하고 있지만 모든 Access Text 필드는 ADOX.DataTypeEnum.adVarWChar로를 선언 할 필요가 있도록 유니 코드를 저장할 수 있습니다.

+0

확인. 요청한대로 데이터 유형을 변경했지만 동일한 예외가 발생합니다. – Alan

+0

@Alan 첫 번째 것을 놓쳤습니다.'provTable.Columns.Append ("name", ADOX.DataTypeEnum.adVarChar, 4); ' –

+0

예! 그거였다. 당신이 옳았. 가득 차있는 브라우니 점. – Alan