我有一个使用 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 中的字符串匹配(这是一个我不太明白它来自哪里的文件或我应该做什么或不做什么)。