Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何用C语言编程创建Microsoft Access数据库?_C#_.net_Database_Winforms_Ms Access - Fatal编程技术网

C# 如何用C语言编程创建Microsoft Access数据库?

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

如果Microsoft Access数据库文件还不存在,如何用C创建它?

最简单的答案是在程序中嵌入一个空的.mdb/.accdb文件并将其写入磁盘

正确答案是将COM互操作与ADOX库一起使用:

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;