2015-10-06 134 views
0

我正在構建對現有Access數據庫的擴展以及用C#編寫的伴隨前端。最初的Access數據庫設計得不是很好,當然也不是爲未來擴展而設計的。爲了簡單起見,可以說遺留數據庫有兩個表:tblEmployee [empId(AutoNumber), empName(Text)]和tblProjects [prjId(AutoNumber), prjName(Text), prjEmps(Number/Lookup)]。兩個表都有一個AutoNumber主鍵。 Projects表格有一個多值查找字段,允許用戶將多個員工分配給一個項目。當我查詢Access SELECT prjId, prjName, prjEmps FROM tblProject;中的tblProjects表時,prjEmps字段列出了用逗號分隔的所有員工姓名。但是,問題是當我在C#中使用相同的查詢時,prjEmps返回一個不是僱員empId的字符串版本號。我不確定它是否有所作爲,但我在C#中使用了System.Data.OleDbSystem.Data命名空間。這裏是要點我的C#代碼:在C中使用MS Access Lookup字段#

string connStr = @"Provider = Microsoft.ACE.OLEDB.12.0; " + 
     @"Data Source=" + dbFilePath; 
    string query = "SELECT prjId, prjName, prjEmps FROM tblProject;"; 
    OleDbConnection dbConn = new OleDbConnection(connStr); 
    OleDbCommand Cmd = new OleDbCommand(query, dbConn); 
    OleDbDataAdapter adp = new OleDbDataAdapter(query, dbConn); 
    DataTable dt = new DataTable(); 
    adp.Fill(dt); 
    dbConn.Close(); 
    foreach (DataRow row in dt.Rows) 
    { 
     int prjId = row.Field<int>("prjId"); 
     string prjName = row.Field<string>("prjName"); 
     string prjEmps = row.Field<string>("prjEmps"); 
      MessageBox.Show("Project ID: " + prjId.ToString() + "\n" + 
          "Project Name: " + prjName + "\n" + 
          "Employees: " + prjEmps); 
    } 

我會很高興,如果我可以直接去找名稱拼接列表,但我寧願整數鍵等組成的數組。有想法該怎麼解決這個嗎?

+0

Cool name @Andrew – Andrew

+0

您可以嘗試使用'System.Data.Odbc'而不是'System.Data.OleDb',看看是否有任何區別。 Access ODBC驅動程序的行爲有時與OleDB提供者有所不同。 –

回答

2

使用ODBC提供程序,OLEDB不支持多值查找字段,並且如果使用它來讀取多值查找字段,則會使用垃圾值,使用ODBC將得到「;」然後可以將其分成單獨的值或用「,」替換。