質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

4回答

25736閲覧

App.configからDB接続文字列を取得する方法

ygoooo

総合スコア71

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2017/07/21 00:51

App.configを作成し、接続文字列を記述するところまでは理解できたのですが、
それをどうcsファイルと関連付ければよいのかわかりません。

//App.config <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> </system.web> <connectionStrings> <add name="ConnectionString" connectionString="Data Source=255.255.255.255; Initial Catalog=(DBname);Connect Timeout=60;Persist Security Info=True; User ID=(IDname);Password=(Password)" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>

C#

1//csファイル 2using System.Configuration; 3---中略--- 4 try 5 { 6 string ConnectionStr=ConfigurationManager.ConnectionStrings["MyConnectionStr"].ConnectionString;//エラー箇所 7 connection = new SqlConnection(ConnectionStr); 8 connection.Open(); 9 } 10 catch (Exception e) 11 { 12 Console.WriteLine(e.Message); 13 Console.ReadLine(); 14 }

おそらくCSファイルの書き方がおかしいと思うのですが、検索して見つけたコードをコピペしてもうまくいきません。コンパイルすら通りません。
ご教授お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

ではないでしょうか?

もしくは、App.configを以下のように修正

<connectionStrings> <add name="MyConnectionStr"

ということを、SurferOnWwwさんは言っています。

投稿2017/07/21 02:11

root_jp

総合スコア4666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

root_jp

2017/07/21 02:12

おぉ。。。書いてる間に会話が進んでいました。失礼しました。
ygoooo

2017/07/21 02:58

回答くださりありがとうございます。 参照設定だけなおしたところで名前がとっちらかっていたら希望する結果になりませんよね・・・以後気を付けます!
guest

0

ベストアンサー

こんにちは。

App.configファイルへは、手動編集したのでしょうか?
一旦、その定義を消してソリューションエクスプローラから下記の
<プロジェクト名>
>Properties
>Settings.settings
で値を追加してみてください。

ソース上は下記のように記述すれば値を取得できます。
Properties.Settings.Default.DatabaseDataSource

イメージ説明

以上

投稿2017/07/21 01:23

cutedog

総合スコア177

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/07/21 02:01

そこは App.config ではなくて設定ファイルなのですが・・・
cutedog

2017/07/21 03:12

Settings.settingsの定義は App.config に追加されます。 App.config でDB定義しているように見えますが この方のCSファイルのコードでは App.configの文字列を取得してConnectionStrに代入していることから、 単純にconnection = new SqlConnection(ConnectionStr);でコネクション生成したいんではないかと思います。
退会済みユーザー

退会済みユーザー

2017/07/21 03:37 編集

表題は「App.configからDB接続文字列を取得する方法」で、内容は接続文字列を設定済みの app.config から ConfigurationManager を使って取得するということと理解しています。まぁ、質問者さんは取得できれば何でもいいということだったようですが。でも、ストレートに質問に答えるということですと、ちょっと違うかと。
cutedog

2017/07/21 04:44

不毛なので、この話はこれでおしまいにしましょう。
退会済みユーザー

退会済みユーザー

2017/07/21 04:55

あなたが不毛と思うのは構いませんが、それはあなたの中だけにとどめておいてください。
guest

0

<add name="ConnectionString" ... と ...ConnectionStrings["MyConnectionStr"]... で指定している接続文字列の名前が違うようですが、一致させたら取得できませんか?

投稿2017/07/21 01:12

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ygoooo

2017/07/21 01:19

すみません言葉足らずでした。 string ConnectionStr= ConfigurationManager.ConnectionString["MyConnectionStr"].ConnectionString; を入力した時点でConfigurationManagerにエラーが出てしまうんです。 usingしても赤線状態なので、おかしいとすればそこかなと。
退会済みユーザー

退会済みユーザー

2017/07/21 01:26 編集

赤線のところにマウスのカーソルを当てるとエラーメッセージが表示されると思いますが、何と書いてありますか? そこに解決のヒントがあるような気がしますが。 ところで、上の回答で指摘した名前が違うという件は対応されたのでしょうか? せっかくレスしたのにスルーでは悲しい。
ygoooo

2017/07/21 01:34

失礼しました。名前の件、直してみたのですが赤線は消えることなく、「現在のコンテキストにConfigurationManagerという名前は存在しません」とメッセージが出続けます・・・
退会済みユーザー

退会済みユーザー

2017/07/21 01:59

たぶん System.Configuration.dll の参照設定がされてないのだと思います。 ソリューションエクスプローラーで「参照設定」を右クリックして、「参照の追加(R)...」をクリック、出てくるダイアログで「.NET」タブを選択、一覧の中から System.Configuration を探して追加してみてください。
ygoooo

2017/07/21 02:08

アセンブリの設定から追加したら無事ConfigurationManager通りました! 先にcutedogさんの方法で接続できたのですが、SurferOnWww さんの方法でも接続できたのでこれから場合によって使い分けようと思います。 ありがとうございます、助かりました!
退会済みユーザー

退会済みユーザー

2017/07/21 02:36

cutedogさんの方法というのは app.config(アプリケーション構成ファイル)ではなく、それとは別の設定ファイルということを理解されているでしょうか? 違いを理解されると効果的な使い分けができると思いますので、ググるなどして調べてみると良いと思います。
ygoooo

2017/07/21 03:10

正直いいますと仕様書には「DB接続キーをじかに記述しない、プログラムを変更せずに接続文字を変えられるようにすること」としか書いていませんでした。 なのでconfigだったりiniだったりで接続文字列用ファイルまるっと用意する方法や、アプリケーション設定に書き込む方法、いろいろあれど簡単にできるものなら何でもいいやと思ってましたがお二方とも丁寧に説明してくださり両方理解できました。 命名ミスは正直初歩すぎて笑えませんが。。
退会済みユーザー

退会済みユーザー

2017/07/21 03:49

手段は問わないということでしたら最初にそのことを書いておいていただけたらと思います。 質問とは直接関係ないことですが、アップされていたコードで気になったことがあるので一言・・・ (1) Exception をキャッチするのは止めた方が良いです。 (2) コネクションリークを防止するために connection.Open(); で開いた接続は、必ず Close されるようにしましょう。
ygoooo

2017/07/21 06:56

すみません、言葉足らずでした。 ①フォームアプリを作っていまして、Exceptionが生じたらメッセージボックスで表示するシステムにしておりました。この部分に対して説明は不要かなとメッセージ部分を消して単純にwritelineしました。でもやはり良い方法ではないですね。 ②質問時記述してはいませんが、別に切断用のメソッドを用意しており、実行クラスにて都度呼び出す仕組みにしております。 接続部分だけ抜き取ったので、開きっぱなしに見えてしまいますね、すみません。
退会済みユーザー

退会済みユーザー

2017/07/21 07:15

①、② について基本的な理解がされてないと思います。 まず、① ですが、Exception を catch する ⇒ 例外を握りつぶしてなかったことになる ⇒ 想定外のことが起こっているのにユーザーは続けてアプリを実行できる ⇒ 大きな問題(情報漏洩とかファイルを壊すとか)が起こる可能性がある・・・ということで完全に NG です。 ② については、① との関連で NG です。例外がスローされるとそこでアプリは終了してしまいますが、質問者さんが言う「切断用のメソッド」が実行されずに終了したらコネクションリークの問題が出るはずです。 詳しい話を続けたいということでしたら、このスレッドの本来の話とは違うので、新たに別のスレッドを立てて質問していただければ、そこで回答します。
guest

0

ソリューションのプロパティからアプリケーション設定を追加する方法でできました!

以下csファイルでの呼び出し文句

string constring = string.Empty; dt = new DataTable(); constring += "Data Source = "+Properties.Settings.Default.DatabaseDataSource+";"; constring+= "Initial Catalog = " +Properties.Settings.Default.DatabaseInitialCatalog+";"; constring += "User ID ="+Properties.Settings.Default.DatabaseUserID+";"; constring += "Password = "+Properties.Settings.Default.DatabasePassword+";"; System.Data.SqlClient.SqlConnection cSqlConnection = (new System.Data.SqlClient.SqlConnection(constring)); connection = new SqlConnection(constring);

お二方とも、ご協力ありがとうございました。助かりました。

投稿2017/07/21 02:00

ygoooo

総合スコア71

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問