在c#中使用MS Access查找字段
本文关键字:Access 查找 字段 MS | 更新日期: 2023-09-27 18:16:13
我正在构建一个扩展到现有的Access数据库和伴随的前端c#编程。最初的Access数据库设计得不是很好,当然也没有考虑到将来的扩展。为简单起见,假设遗留数据库有2个表:雇员[empId(AutoNumber), empName(Text)]
和项目[prjId(AutoNumber), prjName(Text), prjEmps(Number/Lookup)]
。两个表都有一个AutoNumber主键。Projects表有一个多值查找字段,允许用户将多个雇员分配给一个项目。当我在Access SELECT prjId, prjName, prjEmps FROM tblProject;
中查询tabprojects表时,prjEmps
字段列出了所有以逗号分隔的员工名称。然而,问题是当我在c#中使用相同的查询时,prjEmps
返回一个数字的字符串版本,而不是雇员的empId
。我不确定它是否有区别,但我在c#中使用System.Data.OleDb
和System.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);
}
如果我能得到名字的连接列表,我会很高兴,但我更喜欢整数键或类似的数组。对如何解决这个问题有什么想法吗?
使用ODBC提供程序,OLEDB不支持多值查找字段,如果使用它读取多值查找字段,您将获得垃圾值,使用ODBC您将获得";分隔值,然后可以将其拆分为单个值或替换为","