2013-08-30 54 views
1

我使用DAO here的MS Access OLEDB列属性

使用OLEDB框架解决了这个问题,在VBA,我创建了一个功能,可以查找记录值。但它只能获得原始价值。我需要找到所谓的“行来源”列属性的值

有人能向我解释了如何使用OLEDB

下面是我的一个传统的查找查询功能查找外键值。

string IDatabase.LookupRecord(string column, string table, string lookupColumn, string lookUpValue) 
{ 
    OleDbCommand cmdLookupColumnValue = new OleDbCommand(); 

    string sqlQuery = "SELECT [" + table + "].[" + column + "] " + 
         "FROM [" + table + "] " + 
         "WHERE [" + table + "].[" + lookupColumn + "] = '" + lookUpValue + "'"; 

    cmdLookupColumnValue.CommandText = sqlQuery; 
    cmdLookupColumnValue.CommandType = CommandType.Text; 
    cmdLookupColumnValue.Connection = connection; 

    string result = ""; 

    try 
    { 
     result = cmdLookupColumnValue.ExecuteScalar().ToString(); 
    } 
    catch(Exception ex) 
    { 
     MessageBox.Show("Query is not valid :" + ex.ToString()); 
    } 

    return result; 
} 

编辑我发现下面的代码here其最接近的香港专业教育学院迄今得到。它确实获得像列描述那样的列属性,但它不适用于行Source。有任何想法吗?

public void Test() 
    { 
     string columnName = "Main Space Category"; 

     ADOX.Catalog cat = new ADOX.Catalog(); 
     ADODB.Connection conn = new ADODB.Connection(); 
     conn.Open(connectionString, null, null, 0); 
     cat.ActiveConnection = conn; 
     ADOX.Table mhs = cat.Tables["FI - ROOM"]; 

     var columnDescription = mhs.Columns[columnName].Properties["Description"].Value.ToString(); 

     MessageBox.Show(columnDescription); 

     conn.Close();    
    } 

回答

3

我强烈怀疑,表列的RowSource特性如此具体的访问,你将不得不使用DAO进行检索。下面的C#代码是你可能如何做到这一点的例子:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace daoConsoleApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string TableName = "Cars"; 
      string FieldName = "CarType"; 

      // This code requires the following COM reference in your project: 
      // 
      // Microsoft Office 14.0 Access Database Engine Object Library 
      // 
      var dbe = new Microsoft.Office.Interop.Access.Dao.DBEngine(); 
      Microsoft.Office.Interop.Access.Dao.Database db = dbe.OpenDatabase(@"Z:\_xfer\Database1.accdb"); 
      try 
      { 
       Microsoft.Office.Interop.Access.Dao.Field fld = db.TableDefs[TableName].Fields[FieldName]; 
       string RowSource = ""; 
       try 
       { 
        RowSource = fld.Properties["RowSource"].Value; 
       } 
       catch 
       { 
        // do nothing - RowSource will remain an empty string 
       } 

       if (RowSource.Length == 0) 
       { 
        Console.WriteLine("The field is not a lookup field."); 
       } 
       else 
       { 
        Console.WriteLine(RowSource); 
       } 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.ToString()); 
      } 
     } 
    } 
} 
+0

完美,我没有意识到,DAO是可用于C#。 – MichaelTaylor3D

相关问题