none
SQL Server2000 と SQL Server2008で挙動が違う?(DataAdapter) RRS feed

  • 質問

  • 皆様はじめまして。

     

    ネットで色々と検索をしてみましたが、有用な情報が得られず、今回こちらのフォーラムへ投稿致しました。

    (こちらのフォーラムで宜しいのか迷いましたが・・・)

     

    現在、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側で対応したいと思っています。

     

    よろしくお願いいたします。


    2011年2月24日 8:21