连接字符串中的撇号(单引号)

Apostrophe (single quote) in connection string

我在使用连接字符串中的 ' 字符时遇到问题。 Entity Framework 抛出异常说:

Format of the initialization string does not conform to specification starting at index

我尝试了 here and here 建议的答案,但没有成功。

我也尝试用 SqlConnectionStringBuilder class 构造它,结果得到了同样的异常。

谁能帮帮我?

提前致谢。

编辑:

连接字符串确实在 web.config 文件中,它看起来像这样:

<add name="TestEntities" connectionString="metadata=res://*/DAL.TestModel.csdl|res://*/DAL.TestModel.ssdl|res://*/DAL.TestModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\testsource;initial catalog=testdb;User Id=testuser;Password=test'password;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

问题出在 Password=test'password 位上。

  1. 我不能把它放在双引号里,因为它已经被双引号括起来了。
  2. 我不能把它放在 &quot;-s 之间,因为它也已经被它们包围了。
  3. 而且我不能将它放在单引号中,因为单引号本身就是我要转义的内容。

Password='test&apos;password' 无效。

假设它是包含单引号的密码,您应该尝试将密码括在 xml 编码的双引号中,像这样:

<connectionStrings>
  <add name="MyConnectionString" connectionString="Data Source=.;
    Initial Catalog=MYDB; User ID=MyUser;Password=&quot;my'password&quot;;
    providerName="System.Data.SqlClient";/>
</connectionStrings>

假设您不在 Xml 上下文中(如 @PanagiotisKanavos 所提到的),ConnectionString 初始化看起来像:

var conn = new SqlConnection("Data Source=.;
    Initial Catalog=MYDB; User ID=MyUser;Password=\"my'password\";
    providerName="System.Data.SqlClient")

我终于找到了正确答案。看起来,您必须用单引号将值括起来,并另外复制内部撇号以转义它,如下所示:

Password='test''password'

在这个问题上浪费这么多时间真是太愚蠢了。我希望它能在将来节省一些人的时间。

感谢大家的参与。