2009-06-04 8 views
0

SELECTに使用されたSQL文が返されたフィールドの1つとして計算列を持つ場合、INSERTとUPDATESのSqlDataAdapter/SqlCommandbuilderでエラーを回避する正しい方法は何ですか?SqlCommandBuilderとSQL Server Computed Columns - エラー

数値「は、計算列またはUNION演算子の結果であるため、変更できません。

UPDATE

SELECT *, PercentRating * 500 AS CoreValue FROM ValueListings 

そして、計算列を捨てる: 私はこのようなクエリを使用して問題を修正しました。 これで動作します。どのようにSqlCommandBuilderはになりませんか?は、CoreValueフィールドをUPDATEステートメントとINSERTステートメントにビルドしますか?誰もが内部的にどのように動作するか知っていますか?

+0

グッドニュースは、恥あなたは恐ろしい使用星の通知を選択してください! –

+0

select *表記の何が問題になっていますか?私はこれらのステートメントがDSLに組み込まれているので、SQLを単純なままにしています。 – BuddyJoe

+0

select *を使用する際の問題は、この表にあるレコード数と列数に応じて、パフォーマンスに影響する可能性があることです。たとえば、8列のテーブルから3列だけを必要とする場合は、select *の代わりにselect column1、column2、column3を呼び出すと、必要のないデータが返されるため、より良い結果が得られます。 –

答えて

0

*を使用しないと、後で問題が解決します。 *を使用すると、スキーマが変更された場合、コードが壊れることがあります。名前のついたフィールドがあれば、あなたは良いです。

1

使用文:ValueListings

FROM

SELECT *

続いた後、それに計算列を追加し、データテーブルを入力します。あなたの修正と

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