异常:'system.data.sqlclient.sqlconnection' 的类型初始化器?

14

我无法找出这个异常的问题所在。

'System.Data.SqlClient.SqlConnection' 的类型初始化程序引发了一个异常

第一次尝试:我正在使用 WCF 服务创建一些小型应用程序。它能正常工作,我可以正确地使用 LINQ。大概过了 2 或 3 天,在我关闭 Visual Studio 并重新加载项目后,此异常就出现了。

第二次尝试也是同样的情况。我创建了另一个项目,它能正常工作,但在我做其他事情时(我没有改变任何代码),它也出现了相同的异常。

SQL Server 能正常工作,我可以通过 SQL Management Studio 进行连接而没有任何问题。

单击调试错误会将我带到 linq 文件中的连接字符串。

问题可能出在哪里?我尝试搜索,但找不到解决方法。

谢谢。

12个回答

31

这很可能意味着您的app.config文件存在错误,例如XML格式错误或意外的元素。错误发生的原因是因为SqlConnection内部的静态字段从app.config文件中读取以确定跟踪详细级别,如此处所述: http://msdn.microsoft.com/en-us/library/ms254503.aspx


2
在我的情况下,我忘记包含<configSections>标签。 - danmbuen
@tennisBoy 在我的情况下,仅在configSections中有空内容就会出问题。因此,如果您的app.config文件中有<configSections></configSections>,应用程序会非常在意它。 - RBT

3
如果您的项目中包含 Oracle 和 SQL Server 的 NuGet 包,这个解决方案或许可以帮助您解决此错误。
请卸载以下两个 NuGet 包:
- Oracle.ManagedDataAccess.Core - System.Data.SqlClient
打开您的 app.config 文件,并检查是否仍有任何依赖程序集条目列出。如果有,请现在删除它们。它们可能长这样:
<dependentAssembly>
    <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.0.19.1" newVersion="2.0.19.1" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="System.Data.SqlClient" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.1" newVersion="4.5.0.1" />
</dependentAssembly>

如果您的app.config文件中存在Oracle Managed Data Access部分,请删除整个部分(这可能是解决此问题所需的唯一步骤,但我们执行了本解决方案中列出的所有步骤)。 如果您有它,它可能看起来像这样:

<oracle.manageddataaccess.client>
    <version number="*">
      <settings>
          <!-- your TNS_ADMIN value would be located here -->
      </settings>
      <dataSources>
        <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
      </dataSources>
    </version>
</oracle.manageddataaccess.client>

打开packages.config文件并仔细检查,确保Oracle和SQL Server包的条目不再列出。它们应该被删除了,但是百分之百确定没有坏处。

保存项目,然后重新添加NuGet包。


2

删除 app.config 文件,然后运行程序。


这是一个不太好的答案,但它可能适用于您。我不确定为什么,但它确实起作用了。最有可能是一个格式不正确的App.Config文件,但也有可能是其他什么问题。 - Jason Geiger

1

我遇到了同样的错误。通过更改 "app.config" 中的内容,我找到了解决方法:

<configuration>
  <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="O4E.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
    </sectionGroup>
  </configSections>
  <startup>
    <supportedRuntime version="v2.0.50727"/>
  </startup>
  <applicationSettings>
    <O4E.Settings>
      <setting name="abc" serializeAs="String">
        <value>xyz</value>
      </setting>
    </O4E.Settings>
  </applicationSettings>
  <appSettings>
    <add key="" value=""/>
    <add key="" value=""/>
  </appSettings>
</configuration>

注意: [supportedRuntime version="v2.0.50727"]这一行非常重要。

1

如果您在app.config文件的<appSettings>中有自定义值,那么KB2840628会导致问题... - Stefan Steiger

1
在我的情况下,问题是错误地修改了app.config文件中的标签名称。只需将您的app.config文件与另一个旧文件进行比较即可找出问题...

1

我也曾经遇到过这个异常,当我重新打开我的项目时。在我的情况下,Config文件有一个空标签和一个空的key,如下所示。我删除了appSettings标签以解决问题。

< ?xml version="1.0" encoding="utf-8" ?>

< configuration>

< appSettings>

< add key="" value="site"/>

< /appSettings>

< configSections>

< /configSections>

< /configuration>


0

我在一些程序中遇到了这个问题,它们运行良好数月,但突然停止工作。我发现的解决方法是将以下代码作为Main()函数的第一个调用。

System.Configuration.ConfigurationManager.GetSection("system.xml/xmlReader");


0

我已经阅读了很多关于这个问题的内容,但没有人提到以下原因导致此错误。

我们的一些用户曾经安装过旧版本的VMWare View Client,然后进行了升级,现在他们遇到了这个问题。

'System.Data.SqlClient.SqlConnection'的类型初始化程序引发了异常

  • 只安装旧版本VMWare View Client的用户没有问题。
  • 只安装新版本VMWare View Client的用户没有问题。
  • 但是,曾经安装过旧版本VMWare View Client并进行了升级的用户会遇到问题,即使我们卸载VMWare View Client,然后安装新版本也无济于事。

我们尝试重新安装.NET Framework和Visual Studio Tools for Office,但这并没有解决任何问题。

我们还没有找到解决方法,但我希望这可以帮助其他用户。

顺便说一下,我们检查了app.configweb.config,这些都没问题(并且与我们其他用户的工作完美匹配)。

另一个发现:

  • 如果您的用户具有本地管理员权限,则在升级VMWare View Client后不会出现此问题。
  • 如果他们没有本地管理员权限,则会出现问题。

所以...我们现在陷入困境。

我有一台测试笔记本电脑,当我的用户ID没有本地管理员权限时,我每次都可以重现这个错误。如果我们授予本地管理员权限,然后我再次登录,错误就消失了。

我在我的代码中添加了很多try..catch,并发现异常发生在以下这行代码中:

MikesDataContext dc = new MikesDataContext()

所以,实际上是在 建立连接 时抛出了异常。它还没有执行下一行代码,即使用这个连接的代码。


0

很抱歉这么晚才回复,但是经过连续三天的调查后,我想分享一下我的结果。在 SQL Server Reporting Services 中,特别是在浏览器上出现 HTTP 503 Service Unavailable 错误后,我遇到了同样的错误。

事实证明,问题与运行 SSRS 实例的服务帐户以及连接到数据库的帐户有关,而在我的情况下,数据库位于报告实例所在的另一台服务器上。我还没有能够准确定位配置和/或用户权限内部的问题所在,即帐户确切需要提升的权限。总的来说,似乎潜在的问题是我正在运行 Web 门户代码的帐户没有足够的权限调用 System.Data.SQLClient 类型。

简而言之:检查您的用户权限!希望这可以帮助某些人,我花了长达三天的时间来解决这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接