【问题标题】:The schema returned by the new query differs from the base query (C#/SQL - VS 2012)新查询返回的架构与基本查询不同 (C#/SQL - VS 2012)
【发布时间】:2015-01-05 03:55:08
【问题描述】:

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

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

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

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

我的查询是

SELECT MAX(hourlyPayRate) 
FROM employee

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

新查询返回的架构与基本查询不同。

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

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

谢谢,迈克尔。

【问题讨论】:

  • 您是否尝试过在查询中为您的列设置别名?例如:“SELECT MAX(hourlyPayRate) as MaxPayRate FROM employee”这有点牵强,但 dataGridView 可能会在未命名的列上犹豫不决。
  • 我试过SELECT MAX(hourlyPayRate) as Expr1 FROM employee没有改善。
  • 当我尝试从 DataGridView 添加查询(通过单击“Datagridview 任务”弹出按钮)时,我得到了同样的错误。但是,如果我使用 TableAdapter 上的弹出按钮添加查询,我可以成功添加第二个查询。您是否尝试过以这种方式添加查询?

标签: c# sql datagridview


【解决方案1】:

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

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

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

解决方案是这个查询:

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

然后根据需要从结果中删除不需要的部分。对我来说,这就像拥有一个仅从 hourlyPayRate 属性派生数据的标签一样简单。

【讨论】:

    【解决方案2】:

    这样做的实际原因是基本 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.
    

    【讨论】:

      【解决方案3】:

      这里大家都错了,你不编辑表适配器中的sql而是编辑数据集中的sql。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-05
        • 1970-01-01
        • 1970-01-01
        • 2021-01-17
        • 1970-01-01
        • 1970-01-01
        • 2015-05-28
        • 1970-01-01
        相关资源
        最近更新 更多