新查询返回的架构与基本查询(C#/SQL-VS 2012)不同
本文关键字:查询 2012 不同 SQL-VS 返回 新查询 | 更新日期: 2023-09-27 18:29:36
对于家庭作业任务,我必须开发一个C#应用程序来与SQL Server数据库文件(.mdf
)接口,提供一个dataGridView
来浏览内容,并提供几个按钮来执行查询。
我一直做得很好,找到了如何向我的表适配器添加查询,如何调用它们等。
现在,我在查询返回hourlyPayRate
中的最高薪酬时遇到问题。
我有一个数据库employee
,它包含以下属性:employeeID, name, position, hourlyPayRate
。
我的查询是
SELECT MAX(hourlyPayRate)
FROM employee
我右键单击employeeTableAdapter
,单击"添加查询…",将其命名为Max
并放入查询中。当我点击OK时,我会收到以下错误消息:
新查询返回的架构与基本查询不同。
查询在查询生成器中正确执行,只有当我单击"确定"保存它时,我才会收到错误。
环顾SE,这个问题没有明确的答案。
谢谢,迈克尔。
对于所有想知道的人来说,解决方案已经找到了。
问题是查询返回的表的列数与数据库的列数不同。
通常在大多数DBMS中,这不是一个问题,但由于某种原因,Visual Studio没有这些问题。
解决方案是这样的查询:
SELECT employeeID, name, position, hourlyPayRate
FROM employee
WHERE (hourlyPayRate =
(SELECT MAX(hourlyPayRate) AS MaxRate
FROM employee AS TempTable))
然后根据需要从结果中修剪不需要的部分。对我来说,这就像有一个标签,它只从hourlyPayRate属性派生数据一样简单。
实际原因是基本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.
这里的每个人都错了,你不编辑表适配器中的sql,而是编辑数据集中的sql。