Получите результат запроса Microsoft Access в виде строки C # - PullRequest
1 голос
/ 20 января 2012

Я автоматизирую Microsoft Access из C # примерно так:

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 Ответ

2 голосов
/ 21 января 2012

Возможность использования 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("---------------");
            }
        }
    }
}

Вам не нужен доступ Interop для этого, однако using System.Data.OleDb;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...