【问题标题】:The new command text returns data with schema different from the schema of the main query. Check your query's command text if this is not desired新命令文本返回的数据与主查询的模式不同。如果不需要,请检查查询的命令文本
【发布时间】:2012-01-19 12:43:43
【问题描述】:

The new command text returns data with schema different from the schema of the main query. Check your query's command text if this is not desired.

当我在 Strongly Typed DataSet 中添加一个返回单列的查询时,我会收到此警告

`SELECT DISTINCT Building
 FROM            Room
 ORDER BY Building

当我给出这个查询时,它会向我显示一个警告。

因为当我在 windows 窗体中调用相同的函数时,警告会导致约束错误

【问题讨论】:

    标签: vb.net sql-server-2008-r2 strongly-typed-dataset


    【解决方案1】:

    在查找 DISTINCT 值时,架构将不同于 MAIN 查询。 MAIN 查询通常会包含整个结构以连接到表单。我(例如)希望所有记录中的 DISTINCT 值填充组合框。由于架构错误,这是不可能的。建议没有人需要使用 DISCTINCT 值来填充组合或列表框是无知的。

    底线,需要创建一个新的 TableAdapter,或者循环遍历数据集并使用唯一值填充您的组合。

    能够添加多个查询(FillBy 或 GetBy)来返回行或单个值而不必担心架构将解决很多问题。

    【讨论】:

      【解决方案2】:

      您应该在 TableAdapter 中配置此查询以返回标量(单个)值而不是返回行。否则,TableAdapter 会尝试应用与主查询相同的架构。

      根据您的评论:

      “除了 DataAdapter 的标准功能之外,TableAdapter 还提供了额外的类型化方法,这些方法封装了与关联的类型化 DataTable 共享公共架构的查询。换句话说,您可以在 TableAdapter 上拥有任意数量的查询 只要它们返回的数据符合相同的架构。”

      您要么必须创建另一个具有不同架构(一列)的 TableAdapter,要么继续返回主查询的所有列并选择您需要的列(例如,使用 ComboBox 的 DisplayMember 属性)。

      【讨论】:

      • 我不想用作标量...因为单列可能返回多行
      • @kishorejangid:我能问一下为什么当您的 TableAdapter 的主查询返回多列时,您只需要返回一列吗?您可以简单地选择您需要的列(例如,使用 ComboBox 的 DisplayMember 属性)。
      • 东西在强类型数据集中,我们会得到一个默认的适配器GetData()。在此表 Building 中,我有 7 列,但我只想列出不同的 BuildingNames 列以在 ComboBox 中显示它们,并且组合框只接受一列。
      • 然后创建一个只包含几列的 TableAdapter 的简单变体。 (见我的编辑)你可以称之为Room和你的旧的RoomDetails
      • 你还没明白。如果您的数据模型合理规范化,则每个表中不应该有十几个列。通常,查询 1 列还是 20 列并没有太大区别。因此,将您的 DataTables 拆分为一个小而详细的表应该是非常特殊的。但无论如何,这将是一个干净的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      相关资源
      最近更新 更多