【问题标题】:Exception: type initializer for 'system.data.sqlclient.sqlconnection'?例外:“system.data.sqlclient.sqlconnection”的类型初始化程序?
【发布时间】:2011-10-18 20:51:31
【问题描述】:

我不知道这个异常有什么问题。

“System.Data.SqlClient.SqlConnection”的类型初始化器抛出异常

第一次尝试:我正在使用 WCF 服务来制作一些小型应用程序。它工作得很好,我可以正确使用 LINQ。 2或3天后。也许在我关闭 Visual Studio 并再次加载项目之后。出现异常。

第二次尝试也一样。我创建了另一个项目,它工作得很好,直到我做其他事情(我不更改任何代码)

SQL Server 工作正常,我可以毫无问题地通过 SQL Management Studio 连接。

单击调试错误将我引导至 linq 文件中的连接字符串。

可能是什么问题?我尝试搜索,但找不到解决此问题的答案。

谢谢

【问题讨论】:

    标签: c# linq wcf exception sqlclient


    【解决方案1】:

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

    【讨论】:

    • 在我的情况下,我忘记包含 标签
    • @tennisBoy 在我的例子中,只有 configSections 的内容为空就搞砸了。因此,如果您的 app.config 文件中有 <configSections></configSections>,应用程序会非常介意。
    【解决方案2】:

    如果您的项目包含适用于 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 托管数据访问部分(如果存在)(这可能是您解决此问题唯一需要做的事情,但是我们执行了此解决方案中列出的所有步骤)。如果你有它,它可能看起来像这样:

    <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 包的条目仍未列出 - 它们应该已消失,但 100% 确定也无妨。

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

    【讨论】:

      【解决方案3】:

      当我重新打开我的项目时,我也遇到过这个异常。在我的例子中,配置文件有空标签和键,如下所示。我删除了 appSettings 标签来解决问题。

      配置>

      【讨论】:

        【解决方案4】:

        检查您是否安装了以下 Windows 修补程序 - KB2840628 - 用于 .NET FW 4.0(使用 Windows 控制面板->程序+功能并单击“查看已安装的更新”),如果是,请尝试将其卸载...

        https://connect.microsoft.com/VisualStudio/feedback/details/793500/sqlclr-typeinitializationexception-in-sqlconnection-since-kb2840628

        它为我解决了问题。

        【讨论】:

        • 如果您在 app.config 文件中的 内有自定义值,则 KB2840628 会产生问题 ...
        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

            我有同样的错误。我通过更改“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"] 是最重要的。

            【讨论】:

              【解决方案8】:

              我已经阅读了很多关于此问题的信息,但没有人提到此错误的以下原因。

              我们的一些用户使用旧版本的 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()
              

              所以,实际上建立连接会引发异常。它没有达到使用这个连接的下一行代码。

              【讨论】:

                【解决方案9】:

                很抱歉,对此问题的回复较晚,但在连续近 3 天调查此问题后,我想我会分享我的结果。 在我的浏览器上出现HTTP 503 Service Unavailable 错误后,我在 SQL Server Reporting Services 中弹出了相同的错误,更具体地说是 Web 门户。

                事实证明,问题与运行 SSRS 实例的服务帐户和连接到数据库的帐户有关,在我的情况下,该帐户位于报告实例之外的另一台服务器上。我还不能准确指出问题出在配置和/或用户权限中的位置,即帐户究竟在哪里需要提升权限。总而言之,根本问题似乎是我运行门户网站代码的帐户没有足够的权限来调用 System.Data.SQLClient 类型。

                TL;DR:检查您的用户权限!希望这对某人有所帮助,我花了 3 天的时间来解决这个问题。

                【讨论】:

                  【解决方案10】:

                  与上述解决方案类似,但在我的情况下是 app.config 中需要删除的 applicationSettings 标记。

                  【讨论】:

                    【解决方案11】:

                    我有同样的错误,问题出在 Web.config 中。 就我而言,只需添加 connectionStrings 标记,它的值和问题就解决了。

                    <connectionStrings>
                    your connection strings
                    </connectionStrings> 
                    

                    【讨论】:

                      【解决方案12】:

                      我在几个月内运行良好但突然停止运行的程序上遇到了这个问题。 我发现每次都有效的解决方法是将其作为第一个调用放在 Main() 中。

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

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2019-02-12
                        • 1970-01-01
                        • 2023-03-18
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2018-10-25
                        • 1970-01-01
                        相关资源
                        最近更新 更多