对于家庭作业,我必须开发一个C#应用程序来与SQL Server数据库文件(.mdf
)连接,提供dataGridView
来浏览内容,以及几个按钮来执行查询。 / p>
我一直很顺利,找到了如何向我的表适配器添加查询,如何调用它们等等。
现在我在查询时会遇到问题,该查询会返回hourlyPayRate
中的最高工资。
我有一个数据库employee
,其中包含以下属性:employeeID, name, position, hourlyPayRate
。
我的查询是
SELECT MAX(hourlyPayRate)
FROM employee
我右键单击employeeTableAdapter
,点击“添加查询...”,将其命名为Max
并输入查询。当我单击确定时,我收到以下错误消息:
新查询返回的模式与基本查询不同。
查询在查询构建器中正确执行,只有当我单击“确定”保存它才会收到错误。
环顾SE,这个问题没有明确的答案。
谢谢,迈克尔。
答案 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。