在C#中使用MS Access Lookup字段

时间:2015-10-06 18:10:52

标签: c# ms-access ms-access-2010

我正在构建现有Access数据库的扩展以及用C#编程的伴随前端。最初的Access数据库设计得不是很好,当然也没有考虑到未来的扩展。为简单起见,假设遗留数据库有2个表: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#代码的要点:

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

如果我能得到连接的名称列表,我会很高兴,但我更喜欢整数键的数组等。关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:2)

使用ODBC提供程序,OLEDB不支持多值查找字段,如果您使用它来读取多值查找字段,则会获得垃圾值,使用ODBC将获得&#34 ;;&#34;分离的值,然后可以分成单个值或替换为&#34;,&#34;。