0

WPFとSQLServer2008 R2を使用して動作しているデータベースアプリケーションがあります。これは、2年間、App.ConfigファイルからSQLServer接続文字列を取得しています。数日前、ある開発マシンでApp.ConfigファイルのconnectionStringを無視し始め、現在は別の場所からの文字列(settings.settingsまたはDBMLファイルのように見えます)を使用しています。

なぜこれが起こっているのでしょうか、そしてどうすればそれをやめさせることができますか?

app.configは次のように始まります。

<configuration>
  <configSections>
    <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
  </configSections>
  <connectionStrings>
    <add name="DronzApp.Properties.Settings.DronzAppConnectionString"
     connectionString="Server=dronz.db.123.dronzdbserver.com;Database=dronzdb;User ID=dronz;Password=secretsauce;"
     providerName="System.Data.SqlClient" />
 </connectionStrings>

編集:より多くの情報とどこを見るべきかについてのあなたの両方からの提案に感謝します。WPFアプリがApp.Configやその他の場所で検索する必要のある情報をどこで取得するかはわかりませんが、それを知るまでは、次の部分があります。

私のプログラムが最初に行うことの1つは、データベースをテストすることです(現在は失敗しています)。その直前に、自動生成された関数InitializeComponent()を呼び出します。この関数の自動生成されたコードは次のとおりです。

        /// <summary>
    /// InitializeComponent
    /// </summary>
    [System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public void InitializeComponent() {
        if (_contentLoaded) {
            return;
        }
        _contentLoaded = true;
        System.Uri resourceLocater = new System.Uri("/DronzApp;component/ui/startwindow.xaml", System.UriKind.Relative);

        #line 1 "..\..\..\UI\StartWindow.xaml"
        System.Windows.Application.LoadComponent(this, resourceLocater);

        #line default
        #line hidden
    }

私のスタートウィンドウコンストラクターはInitializeComponent();を呼び出します。次に、次の行でデータベースをテストします。

int hmm = App.db.Dronz_FooTable.Count();

ここで、App.dbは、app.xaml.csファイルで次のように定義されたデータコンテキストです。

public static DronzDataDataContext db = new DronzDataDataContext();

ここで、DronzDataDataContextは、次のようなLINQ-to-SQLによって自動生成されたコードで定義されます。

パブリック部分クラスDronzDataDataContext:System.Data.Linq.DataContext..。

    public DronzDataDataContext() : 
            base(global::DronzApp.Properties.Settings.Default.DronzConnectionString, mappingSource)
    {
        OnCreated();
    }

以前はapp.configファイルに注意を払っていましたが、現在は注意を払っていません。DB例外(間違ったSQLサーバーを使用しようとしているためDBバージョンの問題に関するもの)をキャッチして接続文字列を確認すると、正しい接続文字列ではなく、間違ったSQLServerにファイルを要求しています。使用している接続文字列は、データベーススキーマのインポート時にLinq-to = SQLが作成したDBMLファイル、またはsettings.settingsの文字列(どこから来たのかよくわからないファイル)と一致しているようです。私がそれで何をすべきか、何をすべきでないか)。

4

1 に答える 1

0

わかりました、問題を見つけて修正したようですが、何が原因なのか正確にはわかりません。

Config ファイルを参照するものは、実際には .proj ファイルにあり、どういうわけか、App サブフォルダーではなくプロジェクト ルートに app.config への参照を追加するように変更されました。app.config の他の議論を読むと、おそらく GUI でプロジェクト設定を見ているときに、VS2010 がこれを自動的に行ったと思います。その XML の行を .proj ファイルから手動で削除すると、app.config ファイルが実際にある場所を指す以前のバージョンを見つけて使用できるようになりました。プロジェクトルートにapp.configファイルがなかったので、新しい最初の行が編集されて.projファイルにあると言ったため、connectionString値が見つかったsettings.settingsを見ることになったようですLinq を使用してデータベース ファイルを SQL にインポートしたときのファイルの場所。

于 2012-07-10T20:18:25.477 に答える