- PR -

【ASP.NET2.0】web.configに記述してあるconnectionStringsの値を取得したい

1
投稿者投稿内容
NGO
常連さん
会議室デビュー日: 2005/06/15
投稿数: 29
投稿日時: 2006-07-31 17:26
いつもお世話になっております。

Windows XP SP2
Oracle10g
Visual Web Developer2005(ASP.NET2.0)
コード:VB.NET

にて開発をおこなっております。

web.configに記述してある「connectionStrings」の内容をコード上から取得したいのですが、なかなか思うように動作してくれません。


フォーラムの過去ログを参照し、
「OpenWebConfiguration()を使用してアクセスする」
というところまでは分かり、WEBで検索して、下記のmsdnにあったサンプルを参考にいたしました。
(http://msdn2.microsoft.com/ja-JP/library/4c2kcht0.aspx)


現状のプロジェクトのルートに設置してあるweb.configは
<configuration>
<appSettings/>
<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=ora192.168.1.1;Persist Security Info=True;User ID=test;Password=test;Unicode=True" providerName="System.Data.OracleClient"/>
</connectionStrings>
<system.web>
・・・(省略)・・・

となっております。
MSDNのサンプルを参考にして、

Dim config2 As Configuration = WebConfigurationManager.OpenWebConfiguration(Nothing)

Dim section As New ConnectionStringsSection
section = config2.GetSection("connectionStrings")

Dim connection As New StringBuilder
connection.Append(section.ConnectionStrings.Item(0).ToString())

con.ConnectionString = connection.ToString()

とやってみたのですが、どうしても
"data source=.\\\\\\\\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
という値が取得されてしまいます。
(デバッグ上のイミディエイトウィンドウ上で確認)
「SQLEXPRESS」という記述は、web.config上のどこを見ても見当たらないのですが・・・


どこか別のweb.configを見に行ってしまっているのでしょうか?
Nothingではなく
Dim configPath As String = ""
と宣言したうえで、configPathの値を渡してみましたが、同じ結果でした。



最終的には、共通化を施した
DbOpen()
という関数を読み込まれたときに、上記処理にてConnectionStringsを取得し、DBに接続するという処理を盛り込みたいと思っております。
(今までは、.vbのコード上に直にアドレスやユーザー名を記述しておりました。)
(ConnectionStringsの記述をweb.configで一元化したいのです)


以上です。
なにとぞよろしくお願いいたします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-07-31 17:58
section.ConnectionStringsにItemがいくつもあるんじゃないでしょうか?
表示される接続文字列はmachine.configにデフォルトで設定されているLocalSqlServerへの
接続文字列ではないかと思います。
接続文字列について名前をつけているはずですから、自分がつけた名前のものを取って
くるようにすればいいんじゃないでしょうか。
NGO
常連さん
会議室デビュー日: 2005/06/15
投稿数: 29
投稿日時: 2006-08-01 09:11
>どっとねっとふぁん様
ご返信、ありがとうございます。


やはり別なconfigの値を参照していたのですか。
そもそも

Dim config2 As Configuration = WebConfigurationManager.OpenWebConfiguration(Nothing)

の時点で、まず現プロジェクトのweb.configが参照できていないということですよね。
それじゃいくらがんばったところで、SQLEXPRESSがでてくるわけですね。


「自分がつけた名前のものを取ってくるようにすればいいんじゃないでしょうか」
という辺りの方法を、さらに調べてみることにいたします。
ありがとうございました。
NGO
常連さん
会議室デビュー日: 2005/06/15
投稿数: 29
投稿日時: 2006-08-01 10:07
その後、あれこれ試行錯誤して、何とか取得することができました。
これでいいのかなぁという不安な形になっておりますけど。
ただ、取得できたのは良いものの、新たな問題が。


MSDNでWebConfigurationManager.ConnectionStringsのプロパティを調べていたら、同じようなconfigにアクセスするサンプルを見つけたため、それにのっとって下記の様に修正してみたところ、無事connectonstringsを取得することができました。

Dim value As ConnectionStringSettingsCollection
Dim str As String
value = WebConfigurationManager.ConnectionStrings

str = value.Item(1).ConnectionString

どっとねっとふぁん様がおっしゃる通り、itemが複数ある模様です。


この取得できた接続文字列を、今まで使用していたDB接続関数内
-----------------------------
Public con As New Oracle.DataAccess.Client.OracleConnection
Public cmd As New Oracle.DataAccess.Client.OracleCommand


' ************************************
' * Oracle接続
' ************************************
Public Function DbOpen() As Boolean
con.ConnectionString = "ConnectionString" connectionString="Data Source=ora192.168.1.1;Persist Security Info=True;User ID=test;Password=test;Unicode=True"
con.Open()
cmd.Connection = con

End Function
------------------------------
で、接続文字列を指定している箇所を

con.ConnectionString = "ConnectionString" connectionString="Data Source=ora192.168.1.1;Persist Security Info=True;User
↓(変更)
con.ConnectionString = str

とやるだけで完了かな?なんて思っていたら、

『'unicode' は無効な接続文字列属性です。』


というエラーが表示されました。

str = "ConnectionString" connectionString="Data Source=ora192.168.1.1;Persist Security Info=True;User ID=test;Password=test;Unicode=True"

と直接strに代入してやると、上手く動作いたします。


単純なstring型の変数の値を代入することは、できないのでしょうか?
(何らかの形に変更が必要?)
NGO
常連さん
会議室デビュー日: 2005/06/15
投稿数: 29
投稿日時: 2006-08-01 10:20
失礼しました。
自己解決いたしました。


web.configのconnectionstringsにある
Unicode=True
の値を削除するだけでした・・・。


どうも、お騒がせいたしました。m(_ _)m
1

スキルアップ/キャリアアップ(JOB@IT)