- - PR -
【ASP.NET2.0】web.configに記述してあるconnectionStringsの値を取得したい
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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で一元化したいのです) 以上です。 なにとぞよろしくお願いいたします。 |
|
投稿日時: 2006-07-31 17:58
section.ConnectionStringsにItemがいくつもあるんじゃないでしょうか?
表示される接続文字列はmachine.configにデフォルトで設定されているLocalSqlServerへの 接続文字列ではないかと思います。 接続文字列について名前をつけているはずですから、自分がつけた名前のものを取って くるようにすればいいんじゃないでしょうか。 |
|
投稿日時: 2006-08-01 09:11
>どっとねっとふぁん様
ご返信、ありがとうございます。 やはり別なconfigの値を参照していたのですか。 そもそも Dim config2 As Configuration = WebConfigurationManager.OpenWebConfiguration(Nothing) の時点で、まず現プロジェクトのweb.configが参照できていないということですよね。 それじゃいくらがんばったところで、SQLEXPRESSがでてくるわけですね。 「自分がつけた名前のものを取ってくるようにすればいいんじゃないでしょうか」 という辺りの方法を、さらに調べてみることにいたします。 ありがとうございました。 |
|
投稿日時: 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型の変数の値を代入することは、できないのでしょうか? (何らかの形に変更が必要?) |
|
投稿日時: 2006-08-01 10:20
失礼しました。
自己解決いたしました。 web.configのconnectionstringsにある Unicode=True の値を削除するだけでした・・・。 どうも、お騒がせいたしました。m(_ _)m |
1