0

我有一个使用 WPF 和 SQL Server 2008 R2 的工作数据库应用程序,两年来一直从 App.Config 文件中获取其 SQL Server 连接字符串。几天前,在一台开发机器上,它开始忽略 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 或其他任何地方查看的信息,但在我了解到这一点之前,这里还有一些内容:

我的程序做的第一件事就是测试数据库(现在失败了)。在此之前,它调用自动生成的函数 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 文件中定义的数据上下文:

公共静态 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 文件,现在不注意了。当我捕获数据库异常(这是关于数据库版本问题,因为它试图使用错误的 SQL 服务器)并查看连接字符串时,它正在向错误的 SQL Server 询问文件而不是正确的连接字符串。它使用的连接字符串似乎与导入数据库架构时 Linq-to=SQL 创建的 DBML 文件或 settings.settings 中的字符串匹配(这是一个我不太明白它来自哪里的文件或我应该做什么或不做什么)。

4

1 回答 1

0

好的,我似乎已经找到并解决了问题,但我不知道究竟是什么原因造成的。

引用 Config 文件的内容实际上是在 .proj 文件中,并且以某种方式更改为在项目根目录而不是在 App 子文件夹中添加对 app.config 的引用。通过阅读 app.config 的其他讨论,我认为 VS2010 可能是在我查看 GUI 中的项目设置时自动完成的。从 .proj 文件中手动删除该 XML 行使其能够找到并使用指向 app.config 文件实际位置的先前版本。由于我在项目根目录中没有 app.config 文件,在该文件中新的第一行被编辑为在 .proj 文件中,因此似乎已经转向查看 settings.settings,它在其中找到了 connectionString 值当我使用 Linq to SQL 导入数据库文件时文件在哪里。

于 2012-07-10T20:18:25.477 回答