【发布时间】: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