2012年8月24日金曜日

データセットデザイナからクエリを編集できない

Visual Studio 2010 の VB.NET でデータベースを使ったプロジェクトを修正中。他の開発環境(他のPC)で他の人が修正したプロジェクトのソースを自分の開発環境に持ってきました。ビルドは通るし実行もできるんだけど、テーブルアダプタのクエリの中身を見ようと、データセットデザイナのテーブルアダプタ右クリックから[構成]を選択すると、下のようなエラーダイアログが出て、クエリ編集画面が開きません。


---------------------------
エラー
---------------------------
TableAdapter V_HOGEHOGE の構成 に失敗しました。
オブジェクト 'MySettings' の接続 'HogehogeConnectionString1' が見つかりませんでした。接続文字列がアプリケーション設定に見つからなかったか、または接続文字列に関連付けられているデータ プロバイダーが読み込めませんでした。
---------------------------
OK
---------------------------

プロジェクトのプロパティから設定を見ても、HogehogeConnectionString というのはあるけど ~1 というのは無し。修正作業した人に聞いてみると、件のテーブルアダプタは修正版なんだけど、ソース(データベースのビュー V_HOGEHOGE)を大幅修正したのでいったん削除して同名のものを作りなおしたらしい。そのときには既存の接続名(HogehogeConnectionString)を選択しているはずなんだけど、なぜか ~1 という名前になってしまったようです。(でもあとで聞いたら本人の開発環境でも前述のエラーが出てたそうなのでなんかおかしいんですけどw)
他のデータアダプタは差し替えていないので、エラーが出ずにクエリの構成画面は表示されます。

いつものようにいろいろググったんだけどよくわからないw
~1 の設定がないのを怒られているので、その設定を追加してやるのも手ですが、なんかやだし……。
試しに HogehogeConnectionString と同じ内容で名前を HogehogeConnectionString1 とした接続設定を一度作成してみましたが、これだとデータセットデザイナの構成は実行できます。これを追加しなくてもプログラム自体のビルド・実行はできるので、データセットデザイナだけの問題のようです。
ん、ということは、データセット関連のファイルだけ修正すればいいのか。

(追記:以下ダラダラ書いてますがもっと簡単な方法があるのに気付きましたw 手っ取り早く知りたい人は途中すっ飛ばしてこの投稿の一番下を読んでねw)

現在のプロジェクトを対象に HogehogeConnectionString1 を検索してみると、データセットの xsd ファイルのコードにヒットします。データセット名が ds だとすると ds.xsd ファイル。これを普通にソリューションエクスプローラーからダブルクリックで開くとデータセットデザイナ画面が開きますが、実体はテキストファイルなわけですね。
ソリューションエクスプローラから ds.xsd を右クリック→[ファイルを開くアプリケーションの選択]から「XML(テキスト)エディター」などを選択すると、検索結果からでなくても直接開くことができます。

このコードの最初の方の <Connections> のところに、

<Connection AppSettingsObjectName="MySettings" AppSettingsPropertyName="HogehogeConnectionString1" ~(以下略)


みたいなのがあるのでこの行を削除。
同じところに元の名前の HogehogeConnectionString の行もあると思いますがもちろんこれは削除しないw

あとは検索でヒットした HogehogeConnectionString1 の部分を HogehogeConnectionString に変えて保存すればOK。データセットデザイナでクエリの編集ができるようになりました。

(補足)
調べ始めたときにはビルドで HogehogeConnectionString1 がどうとか指摘されるエラーが出たこともあったのですが、なんか再現しなくなったので詳細が書けませんw
そのエラーの箇所だけ HogehogeConnectionString に直すとビルドは通るようになったのですが、データセットデザイナの方は直らなかったので、データセットとは別のところで出てたのか? データセットのファイルだけどビルドにひっかかったのが1行だけだったので修正し足りなかったのか? 不明です。また再現したら追記しときます。

(さらに補足、というかここが本文でもいいw)
投稿直後にいろいろやってたらもっと簡単な方法を見つけたので追記しますw
データセットデザイナから V_HOGEHOGE のテーブルアダプタ V_HOGEHOGETableAdapter のクエリを右クリックして[構成]を選択してもエラーが出てクエリ編集画面が開かなかったわけですが、このとき、クエリでなくテーブルアダプタ名 V_HOGEHOGETableAdapter をクリックします。
このテープルアダプタのプロパティで Connection を見ると、上記の例ではエラーの元である "HogehogeConnectionString1 (MySettings)" になってますが、ここのドロップダウンリストを展開すると、一覧に元の(本来選択したかった)接続設定の名前 "HogehogeConnectionString (MySettings)" があるはず。これを選択すればOK! ソースコード編集しなくてすみますw 内部的には同じことをやってるんだろうけど。

0 件のコメント: