皆様はじめまして。
ネットで色々と検索をしてみましたが、有用な情報が得られず、今回こちらのフォーラムへ投稿致しました。
(こちらのフォーラムで宜しいのか迷いましたが・・・)
現在、SQL Server2000からSQL Server2008 R2への移行作業をしていまして、問題が発生しています。
アプリケーションはWebアプリケーション(ASP.NET)でFreamWorkは1.1を使用しています。
問題になっているのは、DataAdapterで取得したデータ(DataTable)に対して、画面から入力した値を更新したいのですが、
値を代入する箇所(datatable.rows(x).item(”zzzz”)=100)”で「列'xxxx'は読み取り専用です。」というエラーが発生してしまいます。
プログラムをデバッグ実行しても、SQL Server2000では問題ないのに、SQL Server2008 R2だとエラーになってしまいます。
因みに、SQL 2000から2008へのDBの移行は、デタッチ・アタッチで行ない、SQL 2008では「SQL Server 2000(80)互換モード」を使用しています。
また、DataAdapterに対しては、
adp.MissingMappingAction = MissingMappingAction.Passthrough
adp.MissingSchemaAction = MissingSchemaAction.AddWithKey
というプロパティを設定しています。
それと怪しいと思われるところですが、
DataAdapterで取得する際のクエリで、値を代入しようとしている列をサブクエリで取得しています。
(例) Select aaa, bbb * (select zzz from Tbl_B where id=1) from Tbl_A
こんな感じです。
この時、列「bbb」に値を代入するところで、「bbb」が読み取り専用(?)となってしまうようです。
SQL Server2008でスキーマ情報がとれないのが原因なのか?と思っているのですが、
解決方法が見つかりません。
プログラムを修正するのが一番の方法だと思いますが、プログラムの本数がかなりあるので、
できればSQL Server側で対応したいと思っています。
よろしくお願いいたします。