新查询返回的架构与基本查询(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,这个问题没有明确的答案。

谢谢,迈克尔。

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

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

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

通常在大多数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。