【问题标题】:How to fix error ::Format of the initialization string does not conform to specification starting at index 0::如何修复错误::初始化字符串的格式不符合从索引 0 开始的规范::
【发布时间】:2012-01-27 21:22:40
【问题描述】:

我在 godaddy 共享主机上上传了我的网站。我可以从我的管理工作室访问这个数据库。我无法从我的网站访问此数据库。我收到以下错误:

初始化字符串的格式不符合从索引 0 开始的规范。

我的连接字符串在 web.config 中,它看起来像这样:

<connectionStrings>
    <add name="mcn" connectionString="Data Source=mydatabase.db.8706856.hostedresource.com; Initial Catalog=mydatabase; User ID=username; Password=xyz;" providerName="System.Data.SqlClient" />    
</connectionStrings>

是什么导致了这个错误?我也试过写...Data Source=(local);...

【问题讨论】:

  • 你有异常的堆栈跟踪吗?
  • 是的,我有,但没有什么重要的。这必须是带有连接字符串的东西。我试图将其重命名为“LocalSqlServer”,但没有。
  • 你的代码是如何引用连接字符串的?
  • 我正在使用“ninject IOC”。在 global.asax 我有 'Bind().To().WithConstructorArgument("connectionString", ConfigurationManager.ConnectionStrings["mcn"].ConnectionString);'代码很好。正如我所说,它适用于我的电脑。它不适用于实时服务器。
  • 如果您将整个 Web.config 文件(按原样)从 GoDaddy 复制回您自己的 PC,是否会出现同样的错误?

标签: asp.net connection-string


【解决方案1】:

查看实际的连接字符串是什么可能会有所帮助。添加到 Global.asax:

throw new Exception(ConfigurationManager.ConnectionStrings["mcn"].ConnectionString);

如果实际的连接字符串是$(ReplacableToken_mcn-Web.config Connection String_0),那就可以解释问题了。

【讨论】:

  • 现在我已经检查过了,是的,我的连接字符串是 '$(ReplacableToken_mcn-Web.config Connection String_0)' 所以我已经将我的普通 web/config 复制到主机服务器并且它可以工作。但是可以吗?我现在有什么安全问题吗?
  • 我不会担心存在安全问题; Web.config 受到保护,不会被 Internet 用户浏览。只需确保您的数据库密码对 GoDaddy 来说是唯一的,因为 GoDaddy 管理员可以看到您的密码。
  • @MichaelLiu +1 刚刚被这个。
【解决方案2】:

我遇到了同样的问题,发现我的连接字符串在连接字符串的中间有一个额外的双引号字符。

【讨论】:

  • 恕我直言,这回答了一个更通用的问题版本,可以帮助更多到达这里的用户想知道 WTF“初始化字符串的格式不符合从索引 0 开始的规范。”意思是。
【解决方案3】:

我最初是调用如下所示的连接字符串值(VB.NET)并得到提到的错误

 Using connection As New SqlConnection("connectionStringName") 
  '// more code would go here...
 End Using

添加对 System.Configuration 的引用并更新我的代码如下所示是我的解决方案。连接字符串不是问题,因为其他控件使用它没有任何问题(SqlDataSource)

Using connection As New SqlConnection(ConfigurationManager.ConnectionStrings("connectionStringName").ConnectionString)
    '// more code would go here...
End Using

【讨论】:

    【解决方案4】:

    就我而言,罪魁祸首是 prod DB 密码中的分号和双引号。我们的 IT 团队使用一些工具来生成密码,所以它生成了一个带有分号和双引号的密码 连接字符串看起来像

    <add key="BusDatabaseConnectionString" value="Data Source=myserver;Initial Catalog=testdb;User Id=Listener;Password=BlaBla"';[]qrk/>
    

    修改了密码,成功了。

    【讨论】:

    • 在使用 EF Core CLI 工具时,这对我来说实际上也是一个问题。除了使用这些工具时,连接字符串在其他任何地方都可以使用。删除引号立即解决了问题。
    【解决方案5】:

    我在 VS2015 中有这个,我的解决方法是更改​​我的 WebConfig 中的第一行

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

    <?xml version="1.0"?>
    

    好奇。

    【讨论】:

      【解决方案6】:

      我在访问已发布的 ASP.NET Web Api 时遇到了同样的问题。在我的例子中,我意识到当我即将发布 Web Api 时,我没有在 Databases 部分中指定连接字符串:

      所以我使用三点按钮生成它,发布后,它工作了。

      奇怪的是,很长一段时间以来,我很确定该配置中没有连接字符串,但它仍然有效。

      【讨论】:

      • 我的密码没有什么特别之处,但这确实有效。谢谢!
      【解决方案7】:

      另一个陷阱是connectionString 有时指的是 app/web-config 中的连接字符串的名称,有时指的是实际的连接字符串本身,反之亦然。

      很容易修复,但有时很难发现。

      【讨论】:

        【解决方案8】:

        我的问题是我的 web.config 文件保留了对已删除实体模型连接的引用,因此请检查是否有任何过时的连接字符串。

        【讨论】:

          【解决方案9】:

          尝试启动应用程序时出现以下错误:

          初始化字符串的格式不符合从索引 57 开始的规范。

          在我的研究过程中,我发现了这个堆栈,我能够通过查看 web 配置文件来修复这个错误,并发现密码中有一个额外的字符串。删除字符串后,我就可以毫无错误地访问该网站。

          【讨论】:

            【解决方案10】:

            我遇到了这个异常,通过将throwIfV1Schema: false 添加到我的 DbContext 构造函数来修复它:

            public class AppDb : IdentityDbContext<User>
            {
                public AppDb()
                    : base("DefaultConnection", throwIfV1Schema: false)
                {
                }
            }
            

            【讨论】:

              【解决方案11】:

              对于在尝试修复通过运行 Enable-Migrations 导致的相同错误时可能偶然发现此线程的任何人,上述解决方案可能都无法帮助您(我都尝试了)。

              在 PM 控制台中运行后,我在 Web API 2 中遇到了同样的问题:

              Enable-Migrations -EnableAutomaticMigrations -ConnectionString IdentityConnection -ConnectionProviderName System.Data.SqlClient -Force
              

              我通过将其更改为实际使用在IdentityModels 中创建的ApplicationDbContext 来修复它。

              Enable-Migrations -ContextTypeName ApplicationDbContext -EnableAutomaticMigrations -Force
              

              有趣的是,它不仅引用了完全相同的连接字符串,而且构造函数包含了 4castle 所说的潜在修复代码(即throwIfV1Schema: false 建议。

              请注意,-Force 参数仅被使用,因为Configuration.cs 文件已存在。

              【讨论】:

                【解决方案12】:

                我在这个错误上浪费了 1.5 个工作日,最后一位同事通过将用户 ID 替换为 Uid 并将密码替换为 Pwd 解决了这个问题。 .Net 的更新连接字符串对我来说是错误

                【讨论】:

                  【解决方案13】:

                  此线程中列出的解决方案均不适合我。在对 web.config 文件的连接字符串部分进行了一些更改后,我开始收到此错误。 (我的应用程序连接到多个数据库。)我仔细检查了我所做的更改,发现我已经删除了列表顶部的标签。我恢复了连接字符串列表顶部的标签,问题立即消失了。出现错误的站点是位于主站点 (https://www.domain.org/MySite) 下方的应用程序。这可能无法为每个人解决问题,但它确实为我解决了问题。

                  【讨论】:

                    【解决方案14】:

                    一个不需要的单引号是我的问题。 从错误字符串中提到的索引位置检查连接字符串帮助我发现了问题。

                    【讨论】:

                      【解决方案15】:

                      如果您使用的是 EF 和发布配置文件,您的发布配置文件中可能会有一个空白的连接字符串条目。烦人,但完全有可能。

                      【讨论】:

                        【解决方案16】:

                        我在使用 Visual Studio 进行 localhost 开发时遇到了相同的错误消息。请注意,使用 Microsoft 发布管理 (MRM) 发布时一切正常。我通过更改作为 MRM 引用的初始值来解决我的问题。

                        我的 App.config 初始值如下:

                          <connectionStrings>
                            <add name="BDORA" connectionString="__token3__" />
                          </connectionStrings>
                        

                        在本地,应用程序执行无法将 token3 引用解释为其在 Tokens.xml 中的真实值。为了让它在我的本地主机上工作,我不得不将 Tokens.xml 中 token3 的值强制到 App.config 文件中。

                        【讨论】:

                          【解决方案17】:

                          当您意识到自己所做的事情时,我的解决方案非常简单,而且是另一个显而易见的解决方案。我以以下方式使用 .NET Core/Standard 手动构建配置:

                          var configurationBuilder = new ConfigurationBuilder();
                          var root = configurationBuilder.Build(); 
                          

                          忘记包含包含我的配置设置的 appsettings.json 文件

                          configurationBuilder.AddJsonFile("appsettings.json", false);
                          

                          添加后,一切都重新开始工作。

                          【讨论】:

                            【解决方案18】:

                            在我的情况下,这是因为您的解决方案中有多个连接字符串。 一个用于您当前的项目,另一个用于解决方案中的启动项目。 欲了解更多信息,请参阅 Telerik report not working

                            这里我们的情况是一样的。

                            【讨论】:

                              猜你喜欢
                              • 2023-04-10
                              • 2012-01-04
                              • 2015-05-01
                              • 1970-01-01
                              • 1970-01-01
                              • 2022-06-10
                              • 2018-06-07
                              相关资源
                              最近更新 更多