如何从一个表中读取数据,然后将其从另一个表中转换为名称

时间:2013-08-03 12:27:17

标签: asp.net c#-4.0 odbc

这是一个场景,我的数据库中有两个表。一个命名项目,另一个命名为分配。在项目表中,我有2列,其中包含项目ID和项目名称。在assigns表中,我有两列,一个是员工ID,另一个是项目ID。我想要做的是,当有人搜索员工被分配到的项目时,我想显示名称而不是代码。所以,我想从gridview中的项目表中检索项目名称,其中这个id匹配ids到assigns表。

这是我的试用代码:

        OdbcCommand assignslist = new OdbcCommand("SELECT projName FROM projects WHERE projID=(SELECT projname FROM assigns where employeeID='" + empid + "')", _connection);
        OdbcDataReader readassigns = assignslist.ExecuteReader();
        GridView1.DataSource = readassigns;
        GridView1.DataBind(); 

尝试此代码时收到错误。我想将分配给该员工的所有项目检索到gridview中有人可以帮忙吗?!


表格分配

employeeID projname

EJ201 MD101

表项目

projID projName startDate endDate MD101 testa
MD301 testb
MD930 testc


table empos

ID fName midName lName EJ201 jack joe joey
EMP201 a b c

1 个答案:

答案 0 :(得分:0)

您需要JOIN个查询。但是你的设计(或者至少是你的描述)缺少一个基本的信息,即EmployeeName。在您的场景中,通常会有第三个表,其中包含有关Employee的信息及其名称和其他图形信息。

假设您有一个名为Employee with

的第三个表
 EmployeeID  INT
 Name NVARCHAR(50)
 .....

现在,您可以使用类似

的查询检索有关项目的所有信息
SELECT p.projID, p.projName , e.ID, e.fName, .........
FROM projects p INNER JOIN assigns a ON p.projID= a.projID
                INNER JOIN empos e ON a.employeeID= e.ID
WHERE a.employeeID = @empID

JOIN查询的确切语法可能有点不同,但概念是相同的。 JOIN用于表示两个或多个表之间的关系。

string cmdText = "SELECT p.projID, p.projName, e.ID, e.fName, e.midName, e.lName " +
                 "FROM ((projects p INNER JOIN assigns a ON p.projName = a.projname) " +
                 "INNER JOIN empos e ON a.employeeID= e.ID) " +
                 "WHERE a.employeeID = ?";
OdbcCommand assignslist = new OdbcCommand(cmdText, _connection);
assignslist.Parameters.AddWithValue("@empID", empID);
OdbcDataReader readassigns = assignslist.ExecuteReader();
GridView1.DataSource = readassigns;
GridView1.DataBind(); 

我还改变了从暴露于Sql注入的字符串连接构建查询的方式,并将问题解析为更安全的参数化查询。这里empID的值由占位符(问号)表示,然后empID值被添加到参数集合中,其中框架代码将处理传递给底层数据库的值

如果关闭datareader和连接,则代码中的旁注:不明显。请记住这样做(可能使用using statement

编辑通过编辑,现在很清楚已经使用projName而不是projectID建立了关系,所以我更新了上面的查询