【问题标题】:Asp.Net multiple join tables issue from Sqldatasoruce Query Builder into one gridviewAsp.Net 多个连接表问题从 Sqldatasoruce Query Builder 到一个 gridview
【发布时间】:2013-06-09 16:47:24
【问题描述】:

在带有 ASP.NET 4 的 Visual Studio 2010 中,我试图将几个表连接在一起,以将结果放在带有 sqldatasource 的网格视图和详细信息视图中。在 sqldatasource 向导中,我选择指定自定义 SQL 语句或存储过程,然后在 Query Builder 中定义复杂查询(例如 JOIN),我尝试生成 SQL 语句以将问题表与来自其他表的特定列连接起来。但是当我尝试测试查询时,我收到一条错误消息,上面写着“无法在 varchar 上调用方法”。我是 sql 语句的新手,所以请您告知语句有什么问题。 下面是生成的sql语句

 SELECT Problem.ProblemID, Problem.CustomerID, Problem.Summary, 
        Problem.DateLogged, Problem.DateUpdated, Status.Status, Priority.Priority, 
        Technician.Name, Technician.Surname, [Skill Group].[Skill Group], 
        HelpdeskOperator.Name AS Expr1,
        HelpdeskOperator.Surname AS Expr2, Problem.NoteID, Problem.ResolutionID 

 FROM Problem 
INNER JOIN Status ON Problem.StatusID = Status.Status.StatusID 

    INNER JOIN HelpdeskOperator ON 
    Problem.HelpdeskID = HelpdeskOperator.HelpdeskID AND Status.StatusID = HelpdeskOperator.StatusID 

    INNER JOIN Priority ON Problem.PriorityID = Priority.PriorityID 

    INNER JOIN [Skill Group] ON Problem.SkillGroupID = [Skill Group].SkillGroupID 

    INNER JOIN Technician ON Problem.ProblemID = Technician.ProblemID 
    AND Status.StatusID = Technician.StatusID AND
     Priority.PriorityID = Technician.PriorityID 
    AND [Skill Group].SkillGroupID = Technician.SkillGroupID

提前谢谢你

【问题讨论】:

    标签: asp.net sql visual-studio-2010


    【解决方案1】:

    修正了您的查询:

    SELECT p.ProblemID, p.CustomerID, p.Summary, p.DateLogged, p.DateUpdated, s.Status, pr.Priority, t.Name, t.Surname,
           sg.* , ho.Name AS Expr1, ho.Surname AS Expr2, p.NoteID, p.ResolutionID
    FROM Problem p
    INNER JOIN Status s ON p.StatusID = s.StatusID
    INNER JOIN HelpdeskOperator ho ON p.HelpdeskID = ho.HelpdeskID AND s.StatusID = ho.StatusID
    INNER JOIN Priority pr ON p.PriorityID = pr.PriorityID
    INNER JOIN [Skill Group] sg ON p.SkillGroupID = sg.SkillGroupID
    INNER JOIN Technician t ON p.ProblemID = t.ProblemID AND s.StatusID = t.StatusID AND pr.PriorityID = t.PriorityID
                             AND sg.SkillGroupID = t.SkillGroupID
    
    1. 您的连接子句Status.Status.StatusID 中有重复的表标识符
    2. 我怀疑您的Skill Group 表是否包含[Skill Group] 列,因此将其更改为从Skill Group 返回所有值

    我只是认为这些是错误,如果不是,我将需要有关您的查询和表结构的更多信息。

    编辑:

    首先它没有为HelpdeskOperator 返回任何内容,看看我们的查询:

    INNER JOIN HelpdeskOperator ho ON p.HelpdeskID = ho.HelpdeskID AND s.StatusID = ho.StatusID
    

    这意味着这里没有分配给我们的问题和 statusid 的 HelpdeskOperator 记录,因此问题 id 指向 noexisting helpdeskoperator 或 statusid 此运算符与问题状态 ID 不同。

    下一个是Skill Group

    INNER JOIN [Skill Group] sg ON p.SkillGroupID = sg.SkillGroupID
    

    我们的问题再​​次指向没有现有的技能组

    然后Technican

    INNER JOIN Technician t ON p.ProblemID = t.ProblemID AND s.StatusID = t.StatusID AND pr.PriorityID = t.PriorityID
                            AND sg.SkillGroupID = t.SkillGroupID
    

    这里有更多的工作,因为更多的检查,必须将技术分配给我们的问题,具有给定的状态和优先级并且在技能组中,但是我们的技能组是空的?所以要检查是否 我们的问题有技术人员删除AND sg.SkillGroupID = t.SkillGroupID所以你得到

    INNER JOIN Technician t ON p.ProblemID = t.ProblemID AND s.StatusID = t.StatusID AND pr.PriorityID = t.PriorityID 
    

    看看现在有没有技术人员。

    我希望这能为您指明正确的方向。您必须确保每个连接表中都有匹配的记录。

    【讨论】:

    • 您好,我尝试了您的修复,现在错误消息是“无法绑定多部分标识符“Technician.ProblemID”。请您帮忙。
    • 请再试一次,我的查询中有错字:)
    • 我要加入的表是问题表、技术员表、HelpdeskOperator 表、技能组表、状态表和优先级表,每个表都有一个 ID 作为问题表中的外键。查询是从提到的表中返回特定列,并将它们作为一个结果与问题表中的值连接起来。我想先测试一下,因为理想情况下我想要一个下拉列表来过滤技能组表,所有结果都将填充到 gridview 中。
    • 我明白,但我的查询有问题吗?它在工作吗?还是返回错误的结果?我需要更多信息:)
    • 你好,查询已经成功,但是由于某种原因,当我在 Visual Studio 中运行网页时,它不会显示 gridview,你为什么?
    猜你喜欢
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    相关资源
    最近更新 更多