【问题标题】:Format of the initialization string does not conform to specification starting at index 0初始化字符串的格式不符合从索引 0 开始的规范
【发布时间】:2012-01-04 19:02:29
【问题描述】:

我有一个 ASP.NET 应用程序,它在我的本地开发机器上运行良好。

当我在线运行此应用程序时,它显示以下错误:

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

为什么会出现这种情况,我该如何解决?

【问题讨论】:

  • 您可能进行了错误的 sql 调用/连接。如果你用谷歌搜索blogs.msdn.com/b/jongallant/archive/2009/05/02/…
  • stackoverflow.com/questions/9040266/… 投票最多的答案似乎比这里投票最多的答案更准确:尽管您在开发中使用的连接字符串可能有效,但发布需要提供适合生产的不同连接字符串,这可能会失败。例如。问这个问题的人发现连接是“$(ReplacableToken_mcn-Web.config Connection String_0)”,这表明应该作为发布的一部分发生的替换没有发生。

标签: c# asp.net sql-server-2008


【解决方案1】:

就我而言,它是......

index: 58

但最终发生的是生成的密码中有一个单引号。 SQL Server 接受了这一点,但我的连接字符串无法解析它。希望这至少可以为某人节省几分钟,因为我花了一到两个小时才意识到发生了什么。干杯

【讨论】:

    【解决方案2】:

    我生成的密码包含几个在 AWS RDS 中有效的字符,但由于某种原因,我的 .NET 应用程序无法处理它。对我有用的解决方案是生成不带 `(反引号)等字符的新密码。

    【讨论】:

      【解决方案3】:

      在 aspnetcore 中使用 SQLite 遇到了这个问题。我写了

       "DefaultSQLiteConnection": "MyBlog.db"
      

      而不是

      "DefaultSQLiteConnection": "Data Source = MyBlog.db"
      

      【讨论】:

        【解决方案4】:

        您必须使用与从 DbContext 派生的类完全相同的名称。

        例子:注意类名是:“CreativeFormDbContext”

          public class CreativeFormDbContext : DbContext
            {
                public DbSet<Person> Persons { get; set; }
        
              
            }
        

        app.config 文件:名称属性为“CreativeFormDbContext”

        <connectionStrings> 
            <add name="CreativeFormDbContext" providerName="MySql.Data.MySqlClient"
                connectionString="Server=localhost;Database=creativeform;Uid=username;Pwd=pass"/>
          </connectionStrings>
        

        【讨论】:

          【解决方案5】:

          我遇到了这个错误,结果发现原因是我用 Using/End Using 包围了一个(新的)tableadapter。只需更改 tableadapter 以保持更长时间(在我的实例中的课程持续时间)就为我解决了这个问题。也许这会对某人有所帮助。

          【讨论】:

            【解决方案6】:

            我一整天都遇到同样的问题。该错误肯定表明连接字符串问题,因为索引 0 是连接字符串。我的问题是在 Startup 课程中。我用过:

            var connection = Configuration["ConnectionStrings:DefaultConnection"];
            services.AddControllersWithViews();
            services.AddApplicationInsightsTelemetry();
            services.AddDbContextPool<Models.PicTickContext>(options => options.UseSqlServer("connection"));`
            

            这是错误的,而是使用这个:

            services.AddControllersWithViews();
            services.AddApplicationInsightsTelemetry();
            services.AddDbContextPool<Models.PicTickContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
            

            我的问题解决了。

            【讨论】:

            • 这很可能是因为您传递了字符串“connection”而不是变量连接。
            【解决方案7】:

            就我而言,问题在于连接字符串的编码。

            在本地运行没有问题,但在生产环境中安装时显示此错误。

            我的应用程序允许使用表单设置连接字符串,当连接字符串从本地复制到生产环境时,会引入不可见字符,尽管连接字符串在字节级别上看起来是相同的。

            您可以按照以下步骤检查这是否是您的问题:

            1. 将您的连接字符串复制到Notepad++
            2. 将编码更改为 ANSI。在菜单编码>编码为 ANSI。
            3. 检查是否包含其他字符。

            如果已包含这些字符,请将其删除并再次粘贴连接字符串。

            【讨论】:

              【解决方案8】:

              据我所知,只要您的解决方案中有超过 1 个连接字符串(您当前的项目、启动项目等),您可能会遇到此错误

              此链接可能对您有所帮助 click

              【讨论】:

                【解决方案9】:

                我也遇到了这个错误,并且能够通过以下方式解决它: 我之前将 appsettings.json 的连接字符串写入了我创建的部分(ConnectionsStrings(注意额外的“s”)并尝试连接到导致错误的数据库。它是一个 ASP.NET CORE 应用程序,所以我想要使用 .GetConnectionString 方法连接到它(有关 here 的详细信息)。似乎此方法隐式搜索“ConnectionStrings”部分中不存在的连接字符串。当我将其更改/更正为“ ConnectionStrings”它按预期工作。

                【讨论】:

                  【解决方案10】:

                  就我而言,我遇到了类似的错误:

                  应用程序引发了未处理的异常。 System.ArgumentException:初始化字符串的格式不符合从索引 91 开始的规范。

                  我将连接字符串更改为:

                  Server=.;Database=dbname;User Id=myuserid;Password=mypassword"

                  到:

                  Server=.;Database=dbname;User Id=myuserid;Password='mypassword'"

                  它有效,我在密码中添加了单引号。

                  【讨论】:

                  • 谢谢,帮了我!
                  【解决方案11】:

                  在我的情况下,问题是在服务器上,应用程序使用了不同的 appsettings.json 文件。

                  【讨论】:

                    【解决方案12】:

                    对于另一个不幸的灵魂,它正在管理使用内联 sqldatasource 以及存储在 web.config 中的连接字符串的旧 webforms 应用程序,那么如果您访问像 这样的连接字符串,您可能会收到此错误代替 。我们在将 .NET 从 3.5 升级到 4.x 时发生了这种情况。

                    <asp:DropDownList ID="ddl" runat="server" DataSourceID="SqlDataSource1"
                      DataTextField="value" DataValueField="id"></asp:DropDownList>                
                    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                      ConnectionString="<%$ ConnectionStrings:MyConnectionString %>"
                      SelectCommand="select id, value from a_table">
                    </asp:SqlDataSource>
                    

                    【讨论】:

                      【解决方案13】:

                      有时 Sql Server 服务尚未启动。这可能会产生错误。转到服务并启动 Sql Server。这应该使它工作。

                      【讨论】:

                      • 如果 Sql Server Express 未启动,您将获得服务器实例异常,而不是 OP 在他的问题中描述的异常。
                      【解决方案14】:

                      我的问题不是我提供的连接字符串错误,或者我认为我使用的 app.config 中的连接字符串错误,而是我使用了错误的 app.config。

                      【讨论】:

                        【解决方案15】:

                        我删除了连接字符串末尾的 &quot 并且它起作用了

                        代替

                        App=EntityFramework&quot;
                        

                        二手

                        App=EntityFramework;
                        

                        如下设置DefaultConnection

                        <add name="DefaultConnection" connectionString="data source=(local);initial catalog=NamSdb;persist security info=True;user id=sa;password=sa;MultipleActiveResultSets=True;App=EntityFramework;" providerName="System.Data.SqlClient" />
                        

                        注意:在connectionString中不要包含:
                        |x|元数据信息:“metadata=res://*/”
                        |x|编码引号:"""

                        【讨论】:

                          【解决方案16】:

                          我将连接字符串配置复制并粘贴到我的测试项目中并开始遇到此错误。连接字符串在我的 WebAPI 项目中运行良好。这是我的解决方法。

                          var connection = ConfigurationManager.ConnectionStrings["MyConnectionString"];
                          var unitOfWork = new UnitOfWork(new SqlConnection(connection.ConnectionString));
                          

                          【讨论】:

                            【解决方案17】:

                            检查你的连接字符串,就像我忘记添加services.AddDbContext&lt;dbsContext&gt;(options =&gt; options.UseSqlServer("Default"));

                            它会导致错误,当我在这里添加Configuration.GetConnectionString时,它就解决了问题

                            现在的连接是:

                            services.AddDbContext<dbsContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Default")));
                            

                            工作正常(.net core 解决了这个问题)

                            【讨论】:

                              【解决方案18】:

                              我遇到了同样的问题,后来发现部署到 IIS 时没有正确设置连接字符串。在 IIS 中查看站点的连接字符串时,它们是“$(ReplacableToken_devConnection-Web.config Connection String_0)”,而不是实际的连接字符串。我在那里更新了它们,一切都按预期工作

                              【讨论】:

                              【解决方案19】:

                              这可能对某人有帮助.. 我的密码包含一个分号,所以遇到了这个问题。所以在引号中添加了密码。这真是一个愚蠢的错误。

                              我更改了以下内容:

                              <add name="db" connectionString="server=local;database=dbanme;user id=dbuser;password=pass;word" providerName="System.Data.SqlClient" />
                              

                              <add name="db" connectionString="server=local;database=dbanme;user id=dbuser;password='pass;word'" providerName="System.Data.SqlClient" />
                              

                              【讨论】:

                              • 是的,这是我的密码问题;所以添加''解决了它
                              • 救命稻草!我想弄清楚我试图启动和运行的新 Azure 解决方案到底出了什么问题,甚至从未注意到我使用密码管理器自动生成的密码选择了一个分号作为字符之一。如果可以的话,我会赞成这个 10 倍。谢谢! :)
                              【解决方案20】:

                              我有同样的错误。就我而言,这是因为我在连接字符串中缺少密码的右引号。

                              从这里改变

                              <add name="db" connectionString="server=local;database=dbanme;user id=dbuser;password='password" providerName="System.Data.SqlClient" />
                              

                              <add name="db" connectionString="server=local;database=dbanme;user id=dbuser;password='password'" providerName="System.Data.SqlClient" />
                              

                              【讨论】:

                              • 请编写一些示例代码或其他内容以使您的答案完美。一句话解释不了一切
                              • 当然。编辑了我上面的答案。
                              【解决方案21】:

                              我通过更改我的 ASP.NET Web Api 的发布设置上的连接字符串解决了这个问题。

                              查看我在这篇文章中的回答:How to fix error ::Format of the initialization string does not conform to specification starting at index 0::

                              【讨论】:

                                【解决方案22】:

                                我遇到了同样的问题。该网站在本地运行良好,但在 azure 上它会因上述消息而失败。

                                原来问题是在 ctor 中设置连接字符串,如下所示:

                                    public DatabaseContext() 
                                    {
                                        Database.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["db"].ConnectionString;
                                    }
                                

                                不起作用,这将:

                                    public DatabaseContext() : base("db")
                                    {
                                    }
                                

                                打败我..

                                【讨论】:

                                • 这是一个奇怪的修复方法,但也救了我的命。作为记录,“db”是配置文件中连接字符串的键名(我的不是“db”)
                                • 也为我修复了它。我有一个有效的连接字符串,但手动设置它会抛出“初始化字符串的格式不符合从索引 0 开始的规范”。
                                【解决方案23】:

                                我遇到了同样的问题,最后我设法通过以下方式解决了它:

                                问题出在我的 web.config 中的连接字符串定义中。

                                <add name="DefaultConnection" connectionString="DefaultConnection_ConnectionString" providerName="System.Data.SqlClient"/>
                                

                                以上内容在本地运行良好,因为我在管理用户和角色时使用了本地数据库。当我将我的应用程序转移到 IIS 时,无法再访问本地数据库,此外我想在 SQL Server 中使用我的数据库。所以我将上面的连接字符串更改为以下 SQL Server DB 等效项:

                                <add name="DefaultConnection" connectionString="data source=MY_SQL_SERVER; Initial Catalog=MY_DATABASE_NAME; Persist Security Info=true; User Id=sa;Password=Mybl00dyPa$$" providerName="System.Data.SqlClient"/>
                                

                                注意:以上,同样,假设您要使用本地机器中的相同 SQL Server(如果您将其合并到本地 web.config 中 - 这正是我在我的情况下所做的)。

                                【讨论】:

                                  【解决方案24】:

                                  将包含您的DbContext 类的项目设置为启动项目。

                                  我在调用 enable-migrations 时遇到此错误。 即使在Package Manager Console 中我选择了正确的Default project,它仍在查看该启动项目的web.config 文件,其中不存在连接字符串。

                                  【讨论】:

                                  • +1。我认为起始项目应该是包含连接字符串的项目。这是我的问题。感谢您对 Startup 项目的建议。
                                  【解决方案25】:

                                  我的连接字符串“Database==PESitecore1_master”中有错字

                                  <add name="master" connectionString="user id=sa;password=xxxxx;Data Source=APR9038KBD\SQL2014;Database==PESitecore1_master"/>
                                  

                                  【讨论】:

                                    【解决方案26】:

                                    我的问题是我将数据库日志记录代码添加到数据库对象的构造函数中,这似乎对我的 azure 部署配置文件造成了严重破坏。

                                    仅供参考 - 我简化了这个示例,在实际代码中,它在生产中被关闭(但仍在代码中)

                                    public class MyDB : DbContext
                                    {
                                        public MyDB()
                                        {
                                             this.Database.Log = x => { Debug.WriteLine(x); };
                                        }
                                    }
                                    

                                    【讨论】:

                                      【解决方案27】:

                                      当您将网页从一个解决方案复制到另一个解决方案时,也会发生这种情况,然后您运行您的解决方案并发现它在 webconfig 中具有不同的连接字符串名称。然后你不小心在页面设计视图的属性面板中更改了连接字符串的名称。

                                      最好只在代码部分而不是设计中进行更改。

                                      【讨论】:

                                        【解决方案28】:

                                        检查您的连接字符串。如果您需要帮助,请查看Connection Strings,其中列出了常用的列表。

                                        常用的连接字符串:

                                        SQL Server 2012

                                        标准安全

                                        Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
                                        

                                        可信连接

                                        Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;
                                        

                                        连接到 SQL Server 实例

                                        server 选项中使用的服务器/实例名称语法对于所有 SQL Server 连接字符串都是相同的。

                                        Server=myServerName\myInstanceName;Database=myDataBase;User Id=myUsername;
                                        Password=myPassword;
                                        

                                        SQL Server 2005

                                        标准安全

                                        Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
                                        

                                        可信连接

                                        Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;
                                        

                                        连接到 SQL Server 实例

                                        server 选项中使用的服务器/实例名称语法对于所有 SQL Server 连接字符串都是相同的。

                                        Server=myServerName\myInstanceName;Database=myDataBase;User Id=myUsername;Password=myPassword;
                                        

                                        MySQL

                                        标准

                                        Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
                                        

                                        指定 TCP 端口

                                        Server=myServerAddress;Port=1234;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
                                        

                                        甲骨文

                                        使用 TNS

                                        Data Source=TORCL;User Id=myUsername;Password=myPassword;
                                        

                                        使用集成安全性

                                        Data Source=TORCL;Integrated Security=SSPI;
                                        

                                        使用没有 tnsnames.ora 的 ODP.NET

                                        Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));User Id=myUsername;Password=myPassword;
                                        

                                        【讨论】:

                                        • 我的问题与错误的 ConnectionString 无关。我能够从我的开发人员机器连接到生产数据库并使用它。当我部署相同的设置时,我收到此错误。你知道会出什么问题吗?谢谢
                                        • 丹尼斯可能发生了很多事情。首先,您的服务器和您的开发机器是否在同一个网络中?您使用的是哪种登录方式?您是否使用任何类型的代理,您是否在产品服务器的防火墙后面?正在进入任何 VPN?
                                        • 我不确定是谁负责,是 Visual Studio、Web 部署工具还是托管 smarterasp.net。部署应用程序时,某些东西改变了我的连接字符串。我直接访问 web.config 并手动更新它,它可以工作。感谢您抽出时间 +1 ;)
                                        • 它不起作用,我已尝试放置正确的连接字符串。
                                        • 有人能看到这个问题吗? stackoverflow.com/questions/46167682/…
                                        【解决方案29】:

                                        确保您的连接字符串采用以下格式:

                                        服务器=FOOSERVER;database=BLAH_DB;pooling=false;Connect Timeout=60;Integrated Security=SSPI;

                                        如果您的字符串缺少 server 标记,则该方法将返回此错误。

                                        【讨论】:

                                          【解决方案30】:

                                          引用完整的 sp 路径为我解决了这个问题:

                                          var command = new SqlCommand("DatabaseName.dbo.StoredProcedureName", conn)
                                          

                                          【讨论】:

                                            猜你喜欢
                                            • 1970-01-01
                                            • 2018-06-07
                                            • 1970-01-01
                                            • 2011-08-24
                                            • 2015-01-21
                                            • 1970-01-01
                                            • 1970-01-01
                                            相关资源
                                            最近更新 更多