Search code examples
entity-framework-6sqlanywhere

Escape " in entity framework connectionstring


With SQL Anywhere 17 we need to autenticate after connecting, I set this up as a InitString and this works well when i do SAConnection.Connect

<add key="connectionString" value="UID=dba;PWD=***;Host=10.10.10.10:2638;InitString='SET TEMPORARY OPTION CONNECTION_AUTHENTICATION=&quot;Company=Quick Systems AS;Application=EQ Timing;Signature=xxxx...xxx&quot;'"/> 

But when using Entity Framework this string is already encoded once:

<add name="TimingConnection" connectionString="metadata=res://*/Timing.csdl|res://*/Timing.ssdl|res://*/Timing.msl;provider=Sap.Data.SQLAnywhere;provider connection string=&quot;UserID=dba;Password=sql;Host=10.10.10.10&quot;" providerName="System.Data.EntityClient"/>

How can i add the authentication InitString

<add name="TimingConnection" connectionString="metadata=res://*/Timing.csdl|res://*/Timing.ssdl|res://*/Timing.msl;provider=Sap.Data.SQLAnywhere;provider connection string=&quot;UserID=dba;Password=sql;Host=10.10.10.10;InitString='SET TEMPORARY OPTION CONNECTION_AUTHENTICATION=&quot;Company=Quick Systems AS;Application=EQ Timing;Signature=xxx...xxx&quot;'&quot;" providerName="System.Data.EntityClient"/>

The error i get is Format of the initialization string does not conform to specification starting at index 98.


Solution

  • To escape internally in the connectionstring I needed to double the &quot; so it was &quot;&quot;

    <add name="TimingConnection" connectionString="metadata=res://*/Timing.csdl|res://*/Timing.ssdl|res://*/Timing.msl;provider=Sap.Data.SQLAnywhere;provider connection string=&quot&quot;;UserID=dba;Password=sql;Host=10.10.10.10;InitString='SET TEMPORARY OPTION CONNECTION_AUTHENTICATION=&quot;Company=Quick Systems AS;Application=EQ Timing;Signature=xxx...xxx&quot;&quot;'&quot;" providerName="System.Data.EntityClient"/>