Asp.Net多个联接表从Sqldatasoruce查询生成器发布到一个gridview中

Asp.Net多个联接表从Sqldatasoruce查询生成器发布到一个gridview中,asp.net,sql,visual-studio-2010,Asp.net,Sql,Visual Studio 2010,在使用ASP.NET4的VisualStudio2010中,我尝试将多个表连接在一起,以便使用sqldatasource将结果放在gridview和details视图中。在sqldatasource向导中,我选择指定一个自定义SQL语句或存储过程,然后在查询生成器中定义复杂的查询(如联接),我尝试生成一个SQL语句,用其他表中的特定列联接问题表。但是当我尝试测试查询时,我得到一条错误消息,上面说“不能调用varchar上的方法”。我不熟悉sql语句,因此请您就该语句的错误提出建议。 下面是生成的

在使用ASP.NET4的VisualStudio2010中,我尝试将多个表连接在一起,以便使用sqldatasource将结果放在gridview和details视图中。在sqldatasource向导中,我选择指定一个自定义SQL语句或存储过程,然后在查询生成器中定义复杂的查询(如联接),我尝试生成一个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
提前感谢

修复了您的问题:

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
INNER JOIN HelpdeskOperator ho ON p.HelpdeskID = ho.HelpdeskID AND s.StatusID = ho.StatusID
  • 在join子句中有重复的表标识符
    Status.Status.StatusID
  • 我怀疑您的
    技能组
    表中是否包含
    [Skill Group]
    列,因此将其更改为返回
    技能组
    中的所有值
  • 我只是认为这些都是错误,如果不是的话,我需要更多关于查询和表结构的信息

    编辑:

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

    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
    
    INNER JOIN HelpdeskOperator ho ON p.HelpdeskID = ho.HelpdeskID AND s.StatusID = ho.StatusID
    
    这意味着这里没有分配给我们的问题和状态id的
    HelpdeskOperator
    记录,因此问题id指向不存在的HelpdeskOperator或的状态id 此操作员与问题状态id不同

    接下来是
    技能组

    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
    
    这里有更多的工作作为更多的检查,technicas必须以给定的状态和优先级分配给我们的问题,并且在技能组中,但我们的技能组为空?所以我想检查一下 对于我们的问题,有技术人员删除
    和sg.SkillGroupID=t.SkillGroupID
    ,这样您就可以

    INNER JOIN Technician t ON p.ProblemID = t.ProblemID AND s.StatusID = t.StatusID AND pr.PriorityID = t.PriorityID 
    
    看看有没有技术人员


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

    您好,我尝试了您的修复,现在错误消息是“多部件标识符”。ProblemID无法绑定“。请提供帮助。请重试,我的查询中是否有输入错误:)我要加入的表是问题表、技师表、HelpdeskOperator表、技能组表、状态表和优先级表。每个表都有一个ID作为问题表中的外键。查询是从提到的表中返回特定列,并将它们作为一个结果与问题表中的值连接在一起。我想先测试一下,因为理想情况下我需要一个下拉列表来过滤技能组表,所有结果都将填充到gridview中。我明白,但是我的查询有什么问题吗?它起作用了吗?还是返回错误的结果?我需要更多信息:)您好,查询已经运行,但由于某种原因,当我在visual studio中运行网页时,它不会显示gridview,您知道为什么吗?