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

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

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

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

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

455880 次浏览

检查连接字符串。如果您需要相关帮助,请查看连接字符串,其中包含常用类型的列表。

常用的连接字符串:

SQL Server 2012

标准安全性

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

可信连接

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

与SQL Server实例的连接

对于所有SQL Server连接字符串,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实例的连接

对于所有SQL Server连接字符串,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;

引用完整的SP路径为我解决了此问题:

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

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

服务器=fooserver;数据库=blah_db;池=false;连接超时=60;集成安全=SSPI;

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

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

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

我也遇到了同样的问题,最后我通过以下方式解决了这个问题:

问题出在我的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中-这正是我在我的示例中所做的)。

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

仅供参考-我简化了这个例子,在实际代码中,这是在生产中关闭的(但仍然在代码中)

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

我在我的连接字符串“数据库==pesitecore1_主”中输入了错误。

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

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

我在_0调用_ABC时出现此错误。 即使在Package Manager Console中,我选择了正确的Default project,它仍然会查看该启动项目的Web.config文件,其中不存在连接字符串。

我也有同样的问题。该网站在本地运行良好,但在Azure上会失败,并显示上面的消息。

原来问题是在ctor中设置ConnectionString,如下所示:

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

不起作用,这将:

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

难倒我了..

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

在这个帖子上检查我的答案:如何修复错误:初始化字符串的格式不符合从索引0开始的规范:

我犯了同样的错误。在我的例子中,这是因为我在连接字符串中缺少密码的右引号。

从这里改变

<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" />

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

我更改了以下内容:

<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" />

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

检查连接字符串,例如我忘记添加services.AddDbContext<dbsContext>(options => options.UseSqlServer("Default"));

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

就像现在的连接是:

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

工作正常(.NET核心已解决此问题)

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

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

我删除了&;在连接字符串的末尾加上“ ”,这样就成功了。

而不是

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|元数据信息:“元数据=res://*/”
|X|编码引号:“";”

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

有时SQL Server服务尚未启动。这可能会产生错误。转到“服务”并启动SQL Server.这应该能让它工作。 enter image description here

对于另一个不幸的人来说,他正在管理一个使用内联SqlDataSource以及存储在web.config中的连接字符串的遗留WebForms应用程序,如果您访问的连接字符串是<;%APSDataConnectionString%>而不是 <;%$ConnectionStrings:MyConnectionString%>。我们在将.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>

在我的例子中,问题是在服务器上,应用程序使用了不同的appsettings.JSON文件。

在我的例子中,我得到了一个类似的错误:

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

我将连接字符串从:

服务器=.;数据库=dbname;用户ID=myuserid;密码=我的密码

向:

服务器=.;数据库=dbname;用户ID=myuserid;密码='我的密码'

如果成功了,我在密码上加了单引号。

我也有这个错误,并能够解决它如下: 我之前将appSettings.JSON的ConnectionString写入我创建的一个部分(ConnectionsStrings(注意额外的“ s ”)),并尝试连接到我的数据库,这导致了错误。它是一个ASP.NET核心应用程序,因此我希望使用.getConnectionString方法连接到它(有关该在这里的详细信息)。此方法似乎隐式地在“ ConnectionStrings ”部分中搜索不存在的ConnectionString.当我将其更改/更正为“ ConnectionStrings ”时,它按预期工作。

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

此链接可能会对您有所帮助 电击

在我的例子中,问题出在连接字符串的编码上。

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

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

您可以通过以下步骤检查这是否是您的问题:

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

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

我有同样的问题,花了一整天。由于索引0是连接字符串,因此该错误肯定会指示连接字符串问题。我的问题是在启动类。我用过:

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")));

我的问题解决了。

我遇到了这个错误,原来原因是我用使用/结束使用包围了一个(新的)表格适配器。只需更改TableAdapter以保持更长的活动时间(在我的实例中为类的持续时间),就可以为我解决这个问题。也许这会帮助一些人。

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

示例:注意,类名为:";CreativeFormDbContext";

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


      

}

app.config文件:,并且name属性为";CreativeFormDbContext";

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

AspNetCore中的SQLite出现了这个问题。我写了

 "DefaultSQLiteConnection": "MyBlog.db"

而不是

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

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

对我来说,是..

index: 58

但最终发生的情况是,生成的密码中只有一个引号。SQL Server接受了这一点,但我的连接字符串在解析它时遇到了问题。希望这至少能为某人节省几分钟,因为在我意识到发生了什么之前,我花了一到两个小时。干杯

希望这对未来的人有所帮助。我的连接字符串包含用双引号括起来的空值,例如用户ID=";";。所以为了解决这个问题,我必须避开双引号。

Dim ConString = "Data Source=MYSERVER;User ID="";Initial Catalog=Northwinds..."


ConString = ConString.Replace("""", """""")