2016-04-27 131 views
1

我尝试使用ADOX命名空间中创建Access数据库...与ADOX创建Access数据库时,数值字段类型给我COMExceptions

一切正常,当我定义所有领域ADOX.DataTypeEnum.adVarWChar为测试目的,但现在我试图定义 整数或十进制(数字类型),我的代码不工作了...

例外我得到的是一个恶性循环。

adInteger抛出无效的类型异常, adDecimal抛出无效的类型异常, adNumeric抛出无效精度异常

我找不到defning数字字段的正确途径单一来源!

ADOX.Table table1 = new ADOX.Table(); 
     ADOX.Key tableKey1 = new Key(); 
     ADOX.Column idColumn1 = new Column(); 
     // Define column with AutoIncrement features 
     idColumn1.Name = "ID"; 
     idColumn1.Type = ADOX.DataTypeEnum.adInteger; 
     // Set ID as primary key 
     tableKey1.Name = "Primary Key"; 
     tableKey1.Columns.Append("ID"); 
     tableKey1.Type = KeyTypeEnum.adKeyPrimary; 
     //Create the table and it's fields. 
     table1.Name = "Artikli"; 
     table1.Columns.Append(idColumn1); 
     table1.Columns.Append("FLAG", ADOX.DataTypeEnum.adVarWChar, 50); 
     table1.Columns.Append("SIFRA", ADOX.DataTypeEnum.adInteger); 
     table1.Columns.Append("BARKOD", ADOX.DataTypeEnum.adVarWChar, 50); 
     table1.Columns.Append("NAZIV", ADOX.DataTypeEnum.adVarWChar, 50); 
     table1.Columns.Append("JM", ADOX.DataTypeEnum.adVarWChar, 50); 
     table1.Columns.Append("TB", ADOX.DataTypeEnum.adNumeric); 
     table1.Columns.Append("MPC", ADOX.DataTypeEnum.adNumeric); 
     table1.Columns.Append("VPC", ADOX.DataTypeEnum.adNumeric); 
     table1.Columns.Append("NC", ADOX.DataTypeEnum.adNumeric); 
     table1.Columns.Append("ZALIHE", ADOX.DataTypeEnum.adInteger); 
     table1.Columns.Append("RG", ADOX.DataTypeEnum.adVarWChar, 50); 
     table1.Columns.Append("KALO", ADOX.DataTypeEnum.adInteger); 


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 
      idColumn.ParentCatalog = cat; 
      idColumn.Properties["AutoIncrement"].Value = true; 
      idColumn1.ParentCatalog = cat; 
      idColumn1.Properties["AutoIncrement"].Value = true; 
      idColumn2.ParentCatalog = cat; 
      idColumn2.Properties["AutoIncrement"].Value = true; 
      idColumn3.ParentCatalog = cat; 
      idColumn3.Properties["AutoIncrement"].Value = true; 
      idColumn4.ParentCatalog = cat; 
      idColumn4.Properties["AutoIncrement"].Value = true; 
      idColumn5.ParentCatalog = cat; 
      idColumn5.Properties["AutoIncrement"].Value = true; 
      idColumn6.ParentCatalog = cat; 
      idColumn6.Properties["AutoIncrement"].Value = true; 
      idColumn7.ParentCatalog = cat; 
      idColumn7.Properties["AutoIncrement"].Value = true; 
      idColumn8.ParentCatalog = cat; 
      idColumn8.Properties["AutoIncrement"].Value = true; 

      cat.Tables.Append(table); 
      cat.Tables.Append(table1); // throws exception 
      cat.Tables.Append(table2); 
      cat.Tables.Append(table3); 
      cat.Tables.Append(table4); 
      cat.Tables.Append(table5); 
      cat.Tables.Append(table6); 
      cat.Tables.Append(table7); 
      cat.Tables.Append(table8); 
+0

确定我发现此信息:*当您使用Microsoft Jet 4.0和Microsoft SQL Server 7.0的adNumeric数据类型时,您必须设置精度...现在正在处理如何设置精度 - 我将发布更新 – ChenChi

回答

0

事实证明,我必须定义精度的数值类型... 这是语法,但如果有人知道更简单的语法,请分享。

ADOX.Column numeric = new Column(); 
     numeric.Name = "TB"; 
     numeric.Type = ADOX.DataTypeEnum.adNumeric; 
     numeric.Precision = 17; 

table1.Columns.Append(numeric); 
相关问题