新查询返回的模式与基本查询不同(C#/ SQL - VS 2012)

时间:2014-11-08 11:48:52

标签: c# sql datagridview

对于家庭作业,我必须开发一个C#应用程序来与SQL Server数据库文件(.mdf)连接,提供dataGridView来浏览内容,以及几个按钮来执行查询。 / p>

我一直很顺利,找到了如何向我的表适配器添加查询,如何调用它们等等。

现在我在查询时会遇到问题,该查询会返回hourlyPayRate中的最高工资。

我有一个数据库employee,其中包含以下属性:employeeID, name, position, hourlyPayRate

我的查询是

SELECT MAX(hourlyPayRate) 
FROM employee

我右键单击employeeTableAdapter,点击“添加查询...”,将其命名为Max并输入查询。当我单击确定时,我收到以下错误消息:

  

新查询返回的模式与基本查询不同。

查询在查询构建器中正确执行,只有当我单击“确定”保存它才会收到错误。

环顾SE,这个问题没有明确的答案。

谢谢,迈克尔。

3 个答案:

答案 0 :(得分:2)

已经找到解决方案,对于所有想知道的人。

问题是查询返回的表与数据库的列数不同。

通常在大多数DBMS中,这不是问题,但由于某些原因,Visual Studio没有这个问题。

解决方案是这个查询:

SELECT employeeID, name, position, hourlyPayRate FROM employee WHERE (hourlyPayRate = (SELECT MAX(hourlyPayRate) AS MaxRate FROM employee AS TempTable))

然后根据需要修剪不需要的结果。对我来说,这就像拥有一个只从hourlyPayRate属性派生数据的标签一样简单。

答案 1 :(得分:0)

实际原因是基础QUERY返回的列数多于您添加的QUERY。 Visual Studio关心这个;毕竟它不应该是一个新的查询。

注意:我们正在讨论查询列而不是数据库表列。错误与基本查询有关 - 例如填充,也许您希望填充并隐藏foreignID的字段 - 因为您的基本查询输出该列,而您添加的查询没有 - 新查询与基础不同因为列不一样。 (我认为这是为了确保绑定对象被正确绑定;但我真的不知道(想想datagridview。)

所以例如

Fill() Query
SELECT        Id, Name, FKtblThing_ID
FROM            ITEMS

添加此查询有效..

FillByID() Query
SELECT        Id, Name, FKtblThing_ID
FROM            ITEMS
WHERE        (FKtblThing_ID = @FKtbl_ThingID)

如果你试过这个 - 它就行不通了。

FillByID() Query
SELECT        Id, Name
FROM            ITEMS
WHERE        (FKtblThing_ID = @FKtbl_ThingID)

这是您会收到的错误:

The schema returned by the new query differs from the base query.

答案 2 :(得分:0)

这里的每个人都不对,您没有在表适配器中编辑sql,而是在数据集中编辑了sql。