我正在使用C#自动化Microsoft Access:
using Microsoft.Office.Interop.Access;
static void Main(string[] args)
{
Application ap = new Application();
ap.OpenCurrentDatabase("C:\\location.accdb", true);
ap.DoCmd.WhateverIFeelLike();
ap.CloseCurrentDatabase();
}
我想在这里做的是运行存储在Access中的一个选择查询,并将此值作为字符串或字符串数组返回。
我想要这样的事情:
string[] myQueryResult = ap.DoCmd.OpenQuery("qryFoo");
显然这不起作用,但这是我正在寻找的那种东西。作为一种解决方法,我正在考虑将查询结果导出到CSV文件,然后使用Filehelpers将其导入到C#中的数组中,但我想我会先在这里询问,希望有更直接的路径!
由于
答案 0 :(得分:2)
可能是使用OleDb。您需要使用" x86"来构建项目。作为64位计算机上的平台目标,因为Jet驱动程序是32位。
const string DatabasePath = @"C:\DbPath\MyDatabase.mdb";
const string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
DatabasePath;
using (OleDbConnection cnn = new OleDbConnection(ConnectionString)) {
string query = "SELECT * FROM qryFoo";
using (OleDbCommand cmd = new OleDbCommand(query, cnn)) {
cnn.Open();
using (OleDbDataReader reader = cmd.ExecuteReader()) {
int employeeIdOrdinal = reader.GetOrdinal("EmployeeID");
int nameOrdinal = reader.GetOrdinal("Name");
int salaryOrdinal = reader.GetOrdinal("Salary");
while (reader.Read()) {
Console.WriteLine("EmployeeID = {0}", reader.GetInt32(employeeIdOrdinal));
Console.WriteLine("Name = {0}", reader.GetString(nameOrdinal));
if (!reader.IsDBNull(salaryOrdinal)) {
Console.WriteLine("Salary = {0}", reader.GetDouble(salaryOrdinal));
}
Console.WriteLine("---------------");
}
}
}
}
您无需使用Access互操作即可使用using System.Data.OleDb;