2006年10月11日

Settings.Designer.csの接続文字列で嵌った

  
また、やらかした。
前にも同じ間違いをして、悩んだことがあったのに、またしても同じ間違いで時間をつぶしてしまった。。。

ADO.NETを使ったプログラムで、データベースサーバーを個人的に利用している開発サーバーからテストサーバーに移したら、データベースに接続できなくなってしまった。

---
サーバーへの接続を確立しているときにエラーが発生しました。SQL Server 2005 に接続しているときにこのエラーが発生した場合は、SQL Server の既定の設定がリモート接続を許可しないようになっていることがエラーの原因である可能性があります。
---

ここで出るメッセージが不適切なので、原因を特定するのに余計に時間がかかってしまった。

ちゃんと、リモート接続許可はしているし、App.configの接続文字列も変更しているのになぜ???

原因は、App.configの

<connectionStrings>
<add name="Gushwell.Properties.Settings.MyConnectionString"
connectionString="Data Source=....."
providerName="System.Data.SqlClient" />
</connectionStrings>

の、nameの文字列だった。

DataSetを作成してから、プロジェクトの既定の名前空間を変更したのが、問題だったようだ。

DataSetの名前空間と、Settings.Designer.cs の名前空間は、既定の名前空間名に自動的に変更されるのだけれど、それに対応して、App.Configの 上記name 文字列は変更されないのだ。

例えば、Gushwell という既定の名前空間を Gushwell.Dataと変更すると、.cs ファイルの名前空間は、Gushwell.Data に変わるのに、App.Configの name 文字列はそのままになっている。

そうなると、configに記述された文字列が取得できないため、Settings.Designer.csに記述された DefaultSettingValueAttribute 属性の接続文字列が使われることになる。

ここは、開発用マシンの接続文字列が埋め込まれているため、データベースへの接続に失敗するというわけ。

結論
「型付きDataSetを使うプログラムでは、名前空間を変更したら、App.configも変更しないといけない」


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/50608341