2015-10-06 131 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将得到“;”然后可以将其分成单独的值或用“,”替换。