我想用C#创建一个access数据库, 并且同时创建里面的多个table
我自己写了一个程序,可是行不通, 请高人看看
using System;
using ADOX;
using System.IO;
using System.Windows.Forms;namespace LSDS
{
public class CreateDB
{ public static void Create(string mdbPath)
{
if( File.Exists(mdbPath) ) //检查数据库是否已存在
{
MessageBox.Show("The database has existed. Cant be created");
}
string[] n = {"a", "b"};
ADOX.CatalogClass cat = new ADOX.CatalogClass(); 
cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath +";"); 
ADOX.TableClass[] tbl = new ADOX.TableClass[2];
for (int i=0; i<2; i++)
{
tbl[i].ParentCatalog = cat; 
tbl[i].Name=n[i];  ADOX.ColumnClass col = new ADOX.ColumnClass(); 
col.ParentCatalog = cat; 
col.Type=ADOX.DataTypeEnum.adInteger; // 必须先设置字段类型 
col.Name = "id"; 
col.Properties["Jet OLEDB:Allow Zero Length"].Value= false; 
col.Properties["AutoIncrement"].Value= true; 
tbl[i].Columns.Append (col,ADOX.DataTypeEnum.adInteger,0); 
     
//设置主键 
tbl[i].Keys.Append("PrimaryKey",ADOX.KeyTypeEnum.adKeyPrimary,"id","",""); 
cat.Tables.Append (tbl); 
tbl=null; 
cat = null;}  }
}
}

解决方案 »

  1.   

    发现了一些小错误,可是还是不行
    using System;
    using ADOX;
    using System.IO;
    using System.Windows.Forms;namespace LSDS
    {
    public class CreateDB
    { public static void Create(string mdbPath)
    {
    if( File.Exists(mdbPath) ) //检查数据库是否已存在
    {
    MessageBox.Show("The database has existed. Cant be created");
    }
    string[] n = {"a", "b"};
    ADOX.CatalogClass cat = new ADOX.CatalogClass(); 
    cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath +";"); 
    ADOX.TableClass[] tbl = new ADOX.TableClass[2];
    for (int i=0; i<2; i++)
    {
    tbl[i].ParentCatalog = cat; 
    tbl[i].Name=n[i];  ADOX.ColumnClass col = new ADOX.ColumnClass(); 
    col.ParentCatalog = cat; 
    col.Type=ADOX.DataTypeEnum.adInteger; // 必须先设置字段类型 
    col.Name = "id"; 
    col.Properties["Jet OLEDB:Allow Zero Length"].Value= false; 
    col.Properties["AutoIncrement"].Value= true; 
    tbl[i].Columns.Append (col,ADOX.DataTypeEnum.adInteger,0); 
         
    //设置主键 
    tbl[i].Keys.Append("PrimaryKey",ADOX.KeyTypeEnum.adKeyPrimary,"id","",""); 
    cat.Tables.Append (tbl[i]); 
    tbl[i]=null; 
    cat = null;}  }
    }
    }
      

  2.   

    问题出在
    tbl[i] 提示说没有定义
    可是我定义了亚有高人指教一下吗
      

  3.   

    案:C#的语法
    ADOX.TableClass[] tbl = new ADOX.TableClass[2];
    for (int i=0; i<2; i++)
    {
    //这个位置需要加一句tbl[i]=new ADOX.TableClass(......)
    tbl[i].ParentCatalog = cat; 
    tbl[i].Name=n[i]; 
    ................................我没用过ADOX,我一般建库时引入DAO
      

  4.   

    ADOX.TableClass[] tbl = new ADOX.TableClass[2];
    for (int i=0; i<2; i++)
    {
    tbl[i]=new ADOX.TableClass(......)
    tbl[i].ParentCatalog = cat; 
    tbl[i].Name=n[i]; 就是在for中,对每一个数组中的对象重新构造(new)
    实际上,C#中,object[] obj=new object[2]的结果是数组中的所有元素全是null;
    你能对null调用ParentCatalog = cat; 这种方法吗?ADOX.TableClass的构造函数什么?(好久没用Access了,而且不太懂ADOX,我的机器上也没法试,但感觉你的语法有问题)