我正在構建對現有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提供者有所不同。 –