microsoft/mssql-scripter

Cannot connect to SQL Server when password includes semicolon

poyrazus opened this issue · 4 comments

When the password includes semicolon character, then I get error.

Scripting request: e31b1716-762c-44b3-9447-c3f8ee5a050e encountered error: Error parsing ScriptingParams.ConnectionString property.
Error details: System.ArgumentException: Error parsing ScriptingParams.ConnectionString property. ---> System.ArgumentException: Format of the initialization string does not conform to specification starting at index 94.
at System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue)
at System.Data.Common.DbConnectionOptions.ParseInternal(Dictionary2 parsetable, String connectionString, Boolean buildChain, Dictionary2 synonyms, Boolean firstKey)
at System.Data.Common.DbConnectionOptions..ctor(String connectionString, Dictionary`2 synonyms, Boolean useOdbcRules)
at System.Data.Common.DbConnectionStringBuilder.set_ConnectionString(String value)
at System.Data.SqlClient.SqlConnectionStringBuilder..ctor(String connectionString)
at

It took me a while to find the exact cause. I've spend a lot time with different combinations of --server and --connection-string options. Then I've tried against another database (with different user and password) and then realized that it's because of ';' character in password.

Just installed mssql-scripter today, so it should be the latest version.
Version: 1.0.0a23

Here is one of the very commands I've tried
mssql-scripter -S 127.0.0.1 -d database_name -U user_name

Have you tried escaping the semicolon in the password with a \?

e.g. if your password is my;password then it would be my\;password

Semicolon is used as a delimiter in the connection string so if that's a part of the password it'd need to be escaped.

Hi Charles,

After your comment, I've tried that as well. But it didn't work. Same error.
In addition, one thing I saw in my trials is that if semicolon is at the end of the password, it gives "Login failed" error (escaped or unescaped doesn't matter).

In my case, I have created another database user and made my backup with that (luckily I have those privileges).

FWIW I was hitting this error as well (with semicolons in password). Adding double quotes around the password worked for me.

FWIW I was hitting this error as well (with semicolons in password). Adding double quotes around the password worked for me.

did you add it in the backend query, because i face similiar problem