13

コンソール アプリケーションと app.config ファイルと Connections.config ファイルを作成しました。app.config ファイルには、Connections.config を指す接続文字列プロパティ ソースがあります。

アプリケーションで接続文字列を読み取ろうとすると、ConfigurationErrorException

これが私の主な方法です。

static void Main(string[] args)
    {
        var settings = ConfigurationManager.ConnectionStrings;
        if (settings != null)
        {
            foreach (ConnectionStringSettings setting in settings)
            {
                Console.WriteLine(setting.ConnectionString);
            }
        }
    }

App.config ファイル

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings configSource="Connections.config"></connectionStrings>
</configuration>

Connections.config ファイル

<?xml version="1.0" encoding="utf-8" ?>
<connectionStrings>
  <add name="SQLDBConnecion"
   providerName="System.Data.ProviderName"
   connectionString="" />
</connectionStrings>

ここで、私は 2 つのことを観察しました。最初: configSource を指定すると、接続文字列を読み取ることができません (例外をスローします)。

2番目:同じ接続文字列をApp.configファイルに入れて読み取ろうとすると、コードは機能しますが、2つの接続文字列を取得します(空の文字列である1つだけを返すはずです)最初の接続文字列は、このようなsqlexpress接続文字列です

data source=.\SQLEXPRESS;Integrated Security=SSPI;
     AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true

返される 2 番目の接続文字列は空の文字列です (これは予期されることです)。

私のシナリオのように、外部ファイルから接続文字列を読みたいです。どうやってするか?ここで何が欠けていますか?

4

4 に答える 4

10

MSDN は次のように述べています

追加の要素、セクション、または属性を含めないでください。

XML エンコーディングを削除する必要があります。

編集

また、設定ファイルのプロパティをCopy to Output Directory = Copy if newerまたはに設定する必要がありますCopy always

ここに画像の説明を入力

編集 2

Dave が言ったことに基づいて構築するには、clear要素を外部ファイルに追加します。最終的なConnections.configファイルは次のようになります。

<connectionStrings>
  <clear/>
  <add name="Name"
     providerName="System.Data.ProviderName"
     connectionString="Valid Connection String;" />
</connectionStrings>
于 2013-04-22T13:54:36.440 に答える
6

Connections.config ファイルは、xml ヘッダーなしで次のようになります。

<connectionStrings>
  <add name="SQLDBConnecion"
   providerName="System.Data.ProviderName"
   connectionString="" />
</connectionStrings>

また、コンソール アプリケーションでファイルを正しく検索するには、[出力ディレクトリコピー] を [常にコピー]または[新しい場合はコピー] に設定してください。

于 2013-04-22T13:56:17.570 に答える
1

取得する最初の接続文字列は、machine.config から継承されます。これについては、MSDN のドキュメントで説明されています。http://msdn.microsoft.com/en-us/library/bf7sd233(v=vs.90).aspx

構成ファイルで Clear タグを使用して、継承された接続文字列を削除できます。 http://msdn.microsoft.com/en-us/library/ayb15wz8(v=vs.90).aspx

<connectionStrings>
  <clear/>
  <add name="SQLDBConnecion"
   providerName="System.Data.ProviderName"
   connectionString="" />
</connectionStrings>
于 2013-04-22T14:01:37.617 に答える