将Microsoft Access查询的结果作为C#String拉出

时间:2012-01-20 17:53:13

标签: c# ms-access automation

我正在使用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#中的数组中,但我想我会先在这里询问,希望有更直接的路径!

由于

1 个答案:

答案 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;