【问题标题】:Config file and SqlConnection initializing配置文件和SqlConnection初始化
【发布时间】:2013-06-04 17:38:03
【问题描述】:

我在 Window_Loaded 中有以下代码的应用程序(我们称之为 test.exe):

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    SqlConnection sqlConnection = new SqlConnection();
}

不多也不少。应用程序没有问题。 现在,如果我将一个空配置文件 (test.config) 复制到同一目录,应用程序将崩溃。

我没有在应用项目中添加config文件,只是手动复制到同一目录并重命名为.config的空xml文件(这个文件只包含xml声明,以后会用到)。

我可以通过 try-catch 捕获有关缺少 root 的异常,但问题是应用程序在几秒钟后崩溃。

为什么 SqlConnection 会读取这个配置文件?为什么即使在捕获异常之后它也会使我的应用程序崩溃?

【问题讨论】:

  • 去掉SqlConnection的代码行,问题会消失吗?
  • 是的。如果我删除 SqlConnection 行,它不会崩溃。如果我删除/重命名 test.config 也是如此。

标签: c# sqlconnection


【解决方案1】:

我假设您的配置文件名为test.exe.config。

我想应用程序在第一次尝试读取其配置文件时会崩溃。在您的情况下,这是当您实例化 SqlConnection 实例时,但还有很多其他可能发生的方式。

将<configuration> 元素添加到您的配置文件中。

编辑

重现此行为并检查堆栈跟踪。 DbConnectionPoolCounters正在访问一个System.Diagnostics.TraceSwitch,需要从配置文件中读取配置信息。

您应该添加一个带有<configuration> 元素的test.exe.config 文件。然后配置系统将使用该文件并忽略您的空test.config 文件。

【讨论】:

  • 不。文件名为 test.config(不带 .exe)。而且这个配置文件不属于这个应用程序。 Its not added to solution. Its 只是配置文件用于位于同一目录中的其他用途。
  • @majk86 - 发布堆栈跟踪。
  • 谢谢乔。我m curious why it reads config file that does not belong to this app? Just bcs its 叫test.config?如果此配置文件未添加到解决方案中,是否有办法关闭读取配置文件?无论如何标记为已接受的答案。
  • "如果这个配置文件没有添加到解决方案中,有没有办法关闭读取配置文件?" - 在运行时,配置系统不关心它找到的文件是否在 Visual Studio 解决方案中:它按名称查找文件 - 大概它首先查找 appname.exe.config,然后回退到 appname .config.
  • 好吧,我可以想象像 IsConfigSet.. 之类的东西,如果它是真的,请搜索 config。由于诸如 Settings.config 之类的文件可能很常见.. 以及我们的 Settings.exe 之类的应用程序 ..这里会崩溃。谢谢你的时间乔
【解决方案2】:

尝试使用 sqlconnection() 的参数化构造函数。传递您的连接字符串以获得更安全的一面。您的应用程序将不依赖于

【讨论】:

  • 无论如何都会崩溃。 new SqlConnection("Server='server';User='user';Password='password';")
  • 怎么样??像魅力一样工作。
猜你喜欢
  • 2016-11-04
  • 1970-01-01
  • 2019-08-12
  • 2014-09-15
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
相关资源
最近更新 更多