【问题标题】:SqlCommandBuilder and SQL Server Computed Columns - ErrorSqlCommandBuilder 和 SQL Server 计算列 - 错误
【发布时间】:2009-06-04 16:12:38
【问题描述】:

当用于 SELECT 的 SQL 语句将计算列作为返回字段之一时,使用 SqlDataAdapter/SqlCommandbuilder 避免 INSERT 和 UPDATES 错误的正确方法是什么?

我现在收到错误消息“列 Amount 无法修改,因为它要么是计算列,要么是 UNION 运算符的结果”。

更新: 我通过使用这样的查询解决了这个问题:

SELECT *, PercentRating * 500 AS CoreValue FROM ValueListings

并放弃计算列。 现在它起作用了。 SqlCommandBuilder 如何实现 NOT 将 CoreValue 字段构建到 UPDATE 和 INSERT 语句中?有人知道这在内部是如何工作的吗?

【问题讨论】:

  • 修复的好消息,可惜你使用可怕的选择星符号!
  • select * 符号有什么问题?我试图让 SQL 保持简单,因为这些语句嵌入在 DSL 中。
  • 使用 select * 的问题是它可能会影响性能,具体取决于该表的记录数和列数。例如,如果您只需要 8 列表中的 3 列,最好调用 select column1, column2, column3 而不是 select *,因为它会返回很多您不需要的数据。
  • 但是我需要所有的列!所以我仍然对 Chalkey 的言论感到困惑。

标签: c# .net ado.net sqldataadapter sqlcommandbuilder


【解决方案1】:

使用句子:

从值列表中选择 *

然后在填充数据表之后,向其中添加一个计算列:

  Dim Dt as new DataTable
  Da.Fill(Dt)
  Dt.columns.add("CoreValue", GetType(Double), "PercentRating * 500")

【讨论】:

    【解决方案2】:

    如果您可以避免使用 *,它将在以后为您省去麻烦。使用 * 如果您更改架构,您的代码可能会中断。如果命名字段,你很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      • 2011-04-11
      • 2010-09-29
      相关资源
      最近更新 更多