我想用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;} }
}
}
我自己写了一个程序,可是行不通, 请高人看看
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;} }
}
}
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;} }
}
}
tbl[i] 提示说没有定义
可是我定义了亚有高人指教一下吗
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
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,我的机器上也没法试,但感觉你的语法有问题)