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