如果它不存在,如何在C#中创建Microsoft Access数据库文件?
答案 0 :(得分:17)
最简单的答案是在程序中嵌入一个空的.mdb
/ .accdb
文件并将其写入磁盘。
正确答案是将COM Interop与ADOX库一起使用:
var cat = new ADOX.Catalog()
cat.Create(connectionString);
请记住使用OleDbConnectionStringBuilder
生成连接字符串。
答案 1 :(得分:12)
尝试:
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;
}
http://zamirsblog.blogspot.com/2010/11/creating-access-database.html
答案 2 :(得分:9)
在我的电脑上,Windows 7 sp1 Professional 64位,我找到了Microsoft ADO Ext。 2.8 for C:\ Program Files \ Common Files \ System \ ado \ msadox28.dll 中的DDL和安全性。
它也被作为参考:
在参考文献
中包含为 ADOX
默认情况下,列创建为文本[255] 。以下是一些将列创建为不同数据类型的示例。
table.Columns.Append("PartNumber", ADOX.DataTypeEnum.adVarWChar, 6); // text[6]
table.Columns.Append("AnInteger", ADOX.DataTypeEnum.adInteger); // Integer
我找到了这个数据类型列表来创建和读取访问数据库字段
访问文字= adVarWChar
访问备忘录= adLongVarWChar
访问数字字节= adUnsignedTinyInt
Access Numeric Integer = adSmallInt
访问数字长整数= adInteger
访问数字单精度= adSingle
Access Numeric Double Precision = adDouble
访问Numeric Replicatie-id = adGuid
访问数字十进制= adNumeric
访问日期/时间= adDate
访问货币= adCurrency
访问AutoNumber = adInteger
访问是/否= adBoolean
访问HyperLink = adLongVarWChar
答案 3 :(得分:0)
您可以在DAO / ACE库中使用CreateDatabase方法(该方法随Office一起安装,或者可以从here下载)。
// 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;
请注意,根据您要数据库支持的Access / Jet版本,您可以使用DatabaseTypeEnum
枚举中的其他值:
dbVersion10
dbVersion11
dbVersion20
dbVersion30
dbVersion40
dbVersion120
dbVersion140
dbVersion150
还请注意,您可以选择加密数据库或选择其他排序规则。
注意:如果您拥有64位计算机,并且希望将代码作为64位程序的一部分运行,则需要该引擎的64位版本。如果已经安装了32位版本(通过Office或通过下载),则必须运行带有/passive
和/silent
标志的64位安装程序;否则,您会收到一条消息,提示您无法在以前安装的32位组件上安装64位组件。