2012-01-20 56 views
1

我從C#自動化Microsoft Access中,像這樣:拉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(); 
} 

我想在這裏做的是運行存儲內訪問和返回的選擇查詢之一這個值可以是一個字符串或字符串數​​組。

我想是這樣的:

string[] myQueryResult = ap.DoCmd.OpenQuery("qryFoo"); 

顯然,這並不工作,但這樣的那種我要尋找的東西。作爲一種解決方法,我正在考慮將查詢結果導出到CSV文件,然後使用Filehelpers將其導入到C#中的數組中,但我以爲我會先問這裏,希望有更直接的路線!

謝謝

+0

在http://stackoverflow.com/questions/1458786/how-to-programmatically-retrieve-query-看看文本的,所有的查詢。 –

回答

2

一種可能性是使用OleDb。由於Jet驅動程序是32位的,因此您需要在64位計算機上將「x86」構建爲平臺目標。

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("---------------"); 
      } 
     } 
    } 
} 

你不需要接入互操作這個工作,但是一個using System.Data.OleDb;

+0

這正是我所尋找的,謝謝=) – JMK

相關問題