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

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

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

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

SQL Server

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

Q&A

解決済

3回答

22217閲覧

C# 拡張子.configを読め込めず、接続文字列を取得できない

k_mail

総合スコア90

C#

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

SQL Server

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

0グッド

0クリップ

投稿2018/11/25 07:29

編集2018/12/08 04:27

C#を使用して、SQLSeverに接続したいです。
下記のサイトをもとに
ボタンを押下すると、DBに接続できるアプリを作成したのですが、エラーがでて、SQL Severに接続できません。
C# で SQL Server に 接続する 方法

エラー内容は、
「System.NullReferenceException: 'オブジェクト参照がオブジェクト インスタンスに設定されていません。'
System.Configuration.ConnectionStringSettingsCollection.this[string].get が null を返しました。」
です。

詳細

そもそも、SQL Severに接続するファイル名を指定していないからではないかと考えております。

お手数ですが、どこに何を追記・修正すればよいか、ご教示頂きたいです。

↓「app.config」は、\bin\Debug直下に配置しております。

appconfig.config

1<configuration> 2 <connectionStrings> 3 <add name="sqlsvr" 4 connectionString="Data Source=(XXXXXX);Persist Security Info=True;User ID=(sa);Password=(manager)" 5 providerName="System.Data.SqlClient"/> 6 </connectionStrings> 7</configuration>

↓ボタンを押下すると、DBConectクラスにDB情報を取得する

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace チュートリアル_ { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { var dbconect = new DBConect(); var a= dbconect.GetConnectionString(); MessageBox.Show(a); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.SqlClient; using System.Configuration; //using System.Data.SqlClient; namespace チュートリアル_ { class DBConect { public string GetConnectionString() { return ConfigurationManager.ConnectionStrings["sqlsvr"].ConnectionString; } }

【回答済み後の質問追記】
connectionStringsが記載されていなかった

binが表示されない

【やりたかったこと】
app.configファイルの中身を読み取ってくれる

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/11/25 09:00

接続文字列が取得できていないことによるエラーのようですが、そこを解決できても接続文字列にサーバー名が指定されてないので接続できないのでは?
k_mail

2018/11/25 09:04

すいません。サーバー名は都合により、「XXXX」表記とさせて頂きました。実際はサーバー名を設定しております。(SQL Serverを立ち上げたときに表示される小画面のサーバー名)わかりづらく申し訳ありません。
退会済みユーザー

退会済みユーザー

2018/11/25 22:09 編集

同じサーバー名、ユーザー名、パスワードで、SSMS またはコマンドラインから sqlcmd で接続できますか? であれば、他の回答者の方が指摘されているようにプロジェクト直下の app.config にそれを設定すれば良さそう思えます。
退会済みユーザー

退会済みユーザー

2018/11/25 22:22

質問には「SQL Server に接続できない」と書いてあったんですが、コードを見ると接続に行ってはいなくて、単に接続文字列を取得しているだけのようですが、であればそのように質問を書き直していただけませんか。
pepperleaf

2018/11/26 14:08

デバッガ上で動かしているのならば、エラー箇所(多分、GetConnectionString())で止めて、nullとなっているものを確認できませんか?
k_mail

2018/12/02 05:19

質問の表題を変更致しました。また、エラー内容の詳細画像を添付致しました。定義ファイルが読み取れていないとおもうのです。。。
退会済みユーザー

退会済みユーザー

2018/12/02 06:06

上のコメントで「他の回答者の方が指摘されているようにプロジェクト直下の app.config にそれを設定すれば良さそう思えます」と書きましたが、そこはちゃんとやってもらえたのでしょうか? 下の私の回答の画像を見てください。
guest

回答3

0

ベストアンサー

コンパイルはできているようなので参照設定が足らないということはないと理解していますが、そうであればプロジェクトルートの app.config に以下のように接続文字列の設定があれば(質問にあったコードをそのままコピペしてます)、

イメージ説明

接続文字列の内容が間違っていようがいまいが関係なく、質問者さんのコードの通り ConfigurationManager を使って、app.config に設定した通りの内容の接続文字列が取得できるはずです。

イメージ説明

よく調べてみてください。

【追記】

下の 2018/12/08 10:54 の私のコメントで「回答欄に追記しておきます」と書きましたが、それを以下に書きます。

app.configに<connectionStrings>の定義が記載されていませんでした。
今回、直接、コピペでソースに追記しました。
ファイルには記載していたのですが、
ソースには反映されないので、直接ソースに記載しないといけないのでしょうか。

「ファイルには記載していた」というのがどういう意味か分かりませんが・・・

ウィザードで型付 DataSet や ADO.NET Entity Data Model を作成するような場合は自動的に接続文字列が生成され、型付 DataSet の場合は Properties フォルダ下の Settings.settings ファイルに(下の画像を見てください)、ADO.NET Entity Data Model の場合はプロジェクト直下の app.config ファイルに保存されます。

イメージ説明

ウィザードで自動的に生成されない場合は、自力で書いて Settings.settings ファイルまたは app.config ファイルに保存するということになります。

(注)app.config ファイルはアプリをビルドすると自動的に bin/debag または bin/release フォルダに <アプリ名>.exe.config という名前で保存され、.exe が使うのはそのファイルになります。下の画像を見てください。

binが表示されない
SurferOnWwwさんの添付画像にはソリューションに「bin」が表示されています。
しかし、私のソリューションに表示されいません。
これは、なぜでしょうか。

設定の問題で、ソリューションエクスプローラーのアイコンを操作して表示させることができるはずです。以下の画像を見てください。

イメージ説明

投稿2018/12/02 05:44

編集2018/12/08 01:58
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

k_mail

2018/12/07 23:52

ご連絡遅くなり、申し訳ありません。 添付頂いた画像のようにすると、できるようになりました!!!! 丁寧にキャプチャまで貼って頂きわかりやすかったです。 ありがとうございます!! 2点気になったのですが、 ・app.configに<connectionStrings>の定義が記載されていませんでした。  今回、直接、コピペでソースに追記しました。  ファイルには記載していたのですが、  ソースには反映されないので、直接ソースに記載しないといけないのでしょうか。 ・binが表示されない  SurferOnWwwさんの添付画像にはソリューションに「bin」が表示されています。  しかし、私のソリューションに表示されいません。  これは、なぜでしょうか。  可能であれば、ご回答お願い致します。
退会済みユーザー

退会済みユーザー

2018/12/08 01:54

回答欄に追記して送ます。
k_mail

2018/12/08 04:25

>app.config ファイルはアプリをビルドすると自動的に bin/debag または bin/release フォルダに <アプ>リ名>.exe.config という名前で保存 ⇒エディタで開くと確かに、「app.config」と同じ内容が記載されていました。  勉強になりました。ありがとうございます。 ----- >「ファイルには記載していた」というのがどういう意味か分かりませんが・・・ ⇒ファイルに記載した内容を読み込んでいると思っていたのですが、  違うようですね。  本当は、ファイルに記載された文字列を読み込むアプリを作りたかったのですが、  ちょっと今回は違う仕様になってしまいました。。。  (質問欄に画像添付しました。)  ファイルから接続文字列の定義を読み取るサイトを探してみようと思います。  ありがとうございました。 -- (tamoto 2018/11/25 23:38の記載内容がやっとわかりました。  app.configって、アプリケーションのプロジェクトを指していたのですね。。) -------------------------------------------------------  >>また、アプリケーション構成ファイル(app.config)はアプリケーションのプロジェクトのものですか。>>クラスライブラリ(DLL)の場合はアプリケーション構成ファイルの内容は利用できません。 >⇒勉強不足で内容理解できなかったのですが、 > メモ帳を開いて、拡張子を「.txt」⇒「.app」に変更したものになります。 > それを\bin\Debug直下に配置しました。
guest

0

こんにちは。

記憶での回答になります。間違っていたらすみません。
ConfigurationManagerがデフォルトで読むのはappconfig.configではなくapp.configですので、名前を変えたら読めるようになりませんか?

投稿2018/11/25 08:38

tamoto

総合スコア4103

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

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

k_mail

2018/11/25 08:53

ご回答ありがとうございます。名前を変更しましたが、エラー内容は変わらなかったです。。また、何か思い出せば、ご回答をお願いいたします。
tamoto

2018/11/25 14:38

そのエラーは「Configファイルが読み込めなかったとき」「Configファイルから"sqlsvr"という名前の接続文字列値を取り出せなかったとき」に発生するものなので、おそらくはそのどちらかに問題があるはずです。 もっと根本的に気になる部分というと、「app.config」は本来`bin/Debug`に手で置くものではなく、プロジェクトディレクトリ中に配置し、ProjectItemのプロパティ「CopyToOutputDirectory」を設定してコンパイル時に自動コピーするのが一般的なので、そこら辺を標準に合わせることで解決する可能性もあります。
guest

0

下記コードの様に取得名の頭に"DatabaseMigration.Properties.Settings."を付与してみて下さい。

C#

1 public string GetConnectionString() 2 { 3 return ConfigurationManager.ConnectionStrings["DatabaseMigration.Properties.Settings.sqlsvr"].ConnectionString; 4 }

また、アプリケーション構成ファイル(app.config)はアプリケーションのプロジェクトのものですか。クラスライブラリ(DLL)の場合はアプリケーション構成ファイルの内容は利用できません。

投稿2018/11/30 06:37

naitou

総合スコア141

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

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

k_mail

2018/12/02 05:09

ご回答ありがとうございます。 名前を変更しましたが、エラー内容は変わらなかったです。。 >また、アプリケーション構成ファイル(app.config)はアプリケーションのプロジェクトのものですか。>クラスライブラリ(DLL)の場合はアプリケーション構成ファイルの内容は利用できません。 ⇒勉強不足で内容理解できなかったのですが、  メモ帳を開いて、拡張子を「.txt」⇒「.app」に変更したものになります。  それを\bin\Debug直下に配置しました。    tamotoさんも同様のご指摘かと思うのですが、  やり方があまりわからず。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問