Как В документации Microsoft говорится (выделено) -
Строки подключения, используемые ODBC, имеют следующий синтаксис:
connection-string ::= empty-string[;] | attribute[;] | attribute; connection-string
empty-string ::=
attribute ::= attribute-keyword=[{]attribute-value[}]
attribute-value ::= character-string
attribute-keyword ::= identifier
Значения атрибутов могут быть заключены в фигурные скобки, и это хорошая практика. Это позволяет избежать проблем, когда значения атрибута содержат не алфавитно-цифровые символы. Предполагается, что первая закрывающая фигурная скобка в значении завершает значение, поэтому значения не могут содержать закрывающую фигурную скобку.
Я бы посоветовал вам просто удалить скобки при установке пароля, и тогда приведенная выше строка подключения должна работать нормально.
Сложение
Я немного покопался на сайте Microsoft и нашел ABNF-правила , которые могут иметь отношение к делу -
SC = %x3B ; Semicolon
LCB = %x7B ; Left curly brackets
RCB = %x7D ; Right curly brackets
EQ = %x3D ; Equal sign
ESCAPEDRCB = 2RCB ; Double right curly brackets
SpaceStr = *(SP) ; Any number (including 0) spaces
ODBCConnectionString = *(KeyValuePair SC) KeyValuePair [SC]
KeyValuePair = (Key EQ Value / SpaceStr)
Key = SpaceStr KeyName
KeyName = (nonSP-SC-EQ *nonEQ)
Value = (SpaceStr ValueFormat1 SpaceStr) / (ValueContent2)
ValueFormat1 = LCB ValueContent1 RCB
ValueContent1 = *(nonRCB / ESCAPEDRCB)
ValueContent2 = SpaceStr / SpaceStr (nonSP-LCB-SC) *nonSC
nonRCB = %x01-7C / %x7E- FFFF ; not "}"
nonSP-LCB-SC = %x01-1F / %x21-3A / %x3C-7A / %x7C- FFFF ; not space, "{" or ";"
nonSP-SC-EQ = %x01-1F / %x21-3A / %x3C / %x3E- FFFF ; not space, ";" or "="
nonEQ = %x01-3C / %x3E- FFFF ; not "="
nonSC = %x01-003A / %x3C- FFFF ; not ";"
...
ValueFormat1
рекомендуется использовать, когда необходимо, чтобы Value
содержал LCB
, RCB
или EQ
. ValueFormat1
ДОЛЖЕН использоваться, если Value
содержит SC
или начинается с LCB
.
ValueContent1
ДОЛЖНЫ быть заключены в LCB
и RCB
. Пробелы перед LCB
и после RCB
ДОЛЖНЫ игнорироваться.
ValueContent1
ДОЛЖЕН содержаться в ValueFormat1
. Если в ValueContent1
есть RCB
, он ДОЛЖЕН использовать двухсимвольную последовательность ESCAPEDRCB
для представления односимвольного значения RCB
.
Все это сводится к ... Я считаю, что следующая строка подключения должна работать для вас (обратите внимание, что на значении PWD есть 2 левых / открытых скобки и 3 правых / закрытых скобки) - -
"Driver={SQL Server};Server=.\\MyInstance;Database=Master;UID=SA;PWD={{85C86BD7-B15F-4C51-ADDA-3B6A50D89386}}};"