我正在构建对现有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.OleDb
和System.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);
}
我会很高兴,如果我可以直接去找名称拼接列表,但我宁愿整数键等组成的数组。有想法该怎么解决这个吗?
Cool name @Andrew – Andrew
您可以尝试使用'System.Data.Odbc'而不是'System.Data.OleDb',看看是否有任何区别。 Access ODBC驱动程序的行为有时与OleDB提供者有所不同。 –