C# 如何用C语言编程创建Microsoft Access数据库?
如果Microsoft Access数据库文件还不存在,如何用C创建它?最简单的答案是在程序中嵌入一个空的.mdb/.accdb文件并将其写入磁盘 正确答案是将COM互操作与ADOX库一起使用:C# 如何用C语言编程创建Microsoft Access数据库?,c#,.net,database,winforms,ms-access,C#,.net,Database,Winforms,Ms Access,如果Microsoft Access数据库文件还不存在,如何用C创建它?最简单的答案是在程序中嵌入一个空的.mdb/.accdb文件并将其写入磁盘 正确答案是将COM互操作与ADOX库一起使用: var cat = new ADOX.Catalog() cat.Create(connectionString); 请记住使用OleDbConnectionStringBuilder生成连接字符串。尝试: using ADOX; //Requires Microsoft ADO Ext. 2.8 f
var cat = new ADOX.Catalog()
cat.Create(connectionString);
请记住使用OleDbConnectionStringBuilder生成连接字符串。尝试:
using ADOX; //Requires Microsoft ADO Ext. 2.8 for DDL and Security
using ADODB;
public bool CreateNewAccessDatabase(string fileName)
{
bool result = false;
ADOX.Catalog cat = new ADOX.Catalog();
ADOX.Table table = new ADOX.Table();
//Create the table and it's fields.
table.Name = "Table1";
table.Columns.Append("Field1");
table.Columns.Append("Field2");
try
{
cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + "; Jet OLEDB:Engine Type=5");
cat.Tables.Append(table);
//Now Close the database
ADODB.Connection con = cat.ActiveConnection as ADODB.Connection;
if (con != null)
con.Close();
result = true;
}
catch (Exception ex)
{
result = false;
}
cat = null;
return result;
}
在我的计算机Windows 7 sp1 Professional 64位上,我在C:\Program Files\Common Files\System\ADO\msadox28.dll中找到了用于DDL和安全性的Microsoft ADO Ext.2.8 也可作为参考: 作为ADOX包含在参考文献中 默认情况下,列创建为文本[255]。下面是一些将列创建为不同数据类型的示例
table.Columns.Append("PartNumber", ADOX.DataTypeEnum.adVarWChar, 6); // text[6]
table.Columns.Append("AnInteger", ADOX.DataTypeEnum.adInteger); // Integer
我找到了用于创建和读取access数据库字段的数据类型列表
Access Text=adVarWChar
访问备忘录=adLongVarWChar
访问数字字节=adUnsignedTinyInt
访问数字整数=adSmallInt
访问数值长整数=adInteger
访问数字单精度=adSingle
访问数字双精度=可加双精度
访问数字复制id=adGuid
访问数字十进制=adNumeric
访问日期/时间=adDate
访问货币=adCurrency
访问自动编号=adInteger
访问是/否=adBoolean
访问超链接=adLongVarWChar
您可以在与Office一起安装的DAO/ACE库中使用该方法,也可以从中下载
请注意,根据希望数据库支持的Access/Jet版本,可以使用DatabaseTypeEnum枚举中的其他值:
数据库版本10
数据库版本11
数据库版本20
数据库版本30
数据库版本40
数据库版本120
数据库版本140
数据库版本150
还请注意,您可以选择加密数据库,或选择其他排序规则
注意:如果您有一台64位计算机,并且希望将代码作为64位程序的一部分运行,则需要64位版本的引擎。如果已经通过Office或下载安装了32位版本,则必须使用/passive和/silent标志运行64位安装程序;否则,您将收到一条消息,即您不能在以前安装的32位组件上安装64位组件。必须是access,还是您正在寻找基于文件的数据库解决方案来存储数据?SQLite很好,如果你需要的话,它是可移植的。是的,我现在在Android上使用SQLite。评论中提到。只是跟进Zamir的评论。只是一个很晚才注意到的事实,如果你想创建一个自动编号列,你必须将自动增量值设置为true。创建目录后会发生这种情况,将列的ParentCatalog设置为目录,然后设置列的属性[AutoIncrement].Value to trueHint:ADOX库可以在我的机器上找到Microsoft ADO Ext.6.0,用于DDL和安全性。我有一个错误System.Runtime.InteropServices.ComeException类未注册。您知道该类未注册的原因吗?@g00n3r您是否安装了Office或Access版本?很好的示例!记住使用ADODB;//需要.Net framework中的ADODB
// using Microsoft.Office.Interop.Access.Dao;
// using static Microsoft.Office.Interop.Access.Dao.DatabaseTypeEnum;
const string dbLangGeneral = ";LANGID=0x0409;CP=1252;COUNTRY=0";
var engine = new DBEngine();
var dbs = engine.CreateDatabase(@"c:\path\to\database.accdb", dbLangGeneral, dbVersion120);
dbs.Close();
dbs = null;