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

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

初始化字符串的格式不符合规范,起始索引为

我尝试了这里这里建议的答案,但都无济于事。

我还尝试使用SqlConnectionStringBuilder类进行构造,并得到了相同的异常结果。

有人能帮帮我吗?

先感谢您。

编辑:

连接字符串确实在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;中间,因为它已经被包围了。
  3. 而且我不能使用单引号将其括起来,因为单引号本身就是我想要转义的字符。

Password='test&apos;password' 无法正常工作。


这不是一个重复的问题,其他问题中提供的答案并不足够。 - TKharaishvili
2个回答

15

我终于找到了正确的答案。看起来,您需要用单引号将值括起来,并且还需要重复内部撇号以进行转义,像这样:

Password='test''password'

这个问题很愚蠢,浪费了我这么多时间。希望能为将来的某个人节省时间。

感谢所有参与者。


省了我一个头疼。 - Mardymar
你的解决方案帮了我大忙。非常感谢。对于未来的读者:如果你只在读取部分进行检查,那么检查密码是否已正确保存也是值得注意的。 - Steven
"非常感谢你,我在SSIS中因为这个问题快要疯了。需要在开头和结尾添加单引号,并在密码中的每个引号周围添加引号。" - Premjit Chowdhury

3

假设密码中包含一个单引号,您应该尝试将密码括在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")

问题不在于XML字符串中的引号。为了包含特殊字符,属性值本身必须用单引号或双引号括起来。 - Panagiotis Kanavos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接