C# 防止 ConnectionStringBuilder 使用等号转义密码
C# Preventing ConnectionStringBuilder from escaping password with equal sign
我有一个我无法更改的密码,其中有一个等号。使用 OdbcConnectionStringBuilder
时,它适用于没有等号的密码,但当我这样做时,它会转义变量。这行得通,
builder.DataSourceName = "SERVER";
builder.DatabaseFile = "THISSERV";
builder.UserID = "DBA";
builder.Password = "XU5%^YhZ";
并生成以下连接字符串
"UserID=DBA;Password=XU5%^YhZ;DatabaseFile=THISSERV;DataSourceName=SERVER"
但是,如果你输入等号
builder.DataSourceName = "SERVER";
builder.DatabaseFile = "THISSERV";
builder.UserID = "DBA";
builder.Password = "XU5%^Yh=Z";
它生成以下连接字符串并转义密码。
"UserID=DBA;Password=\"XU5%^Yh=Z\";DatabaseFile=THISSERV;DataSourceName=SERVER"
我怎样才能避免这种情况?前面的示例是正确的,但在我的应用程序中,我实际上也在解密密码,如果不相等,这不会影响任何事情,我尝试将 @ 放在 StringCipher 前面,但它没有用。它看起来像这样,第一个参数实际上是一个变量。
builder.Password = StringCipher.Decrypt("0jURE7f9aTOItD5tgl9E6YoBKhMRaxDVj1KfS0SJ/ZBxIKVVbVYZXHMKgndI", "JlkIUJdfolsdff352345rf")
您需要根据 Odbc ConnectionString escape guidelines:
将密码括在大括号 { }
中
A DSN or connection string value enclosed with braces ({}) that
contains any of the characters []{}(),;?*=!@ is passed intact to the
driver.
所以这样称呼应该可行:
builder.Password = "{XU5%^Yh=Z}";
我有一个我无法更改的密码,其中有一个等号。使用 OdbcConnectionStringBuilder
时,它适用于没有等号的密码,但当我这样做时,它会转义变量。这行得通,
builder.DataSourceName = "SERVER";
builder.DatabaseFile = "THISSERV";
builder.UserID = "DBA";
builder.Password = "XU5%^YhZ";
并生成以下连接字符串
"UserID=DBA;Password=XU5%^YhZ;DatabaseFile=THISSERV;DataSourceName=SERVER"
但是,如果你输入等号
builder.DataSourceName = "SERVER";
builder.DatabaseFile = "THISSERV";
builder.UserID = "DBA";
builder.Password = "XU5%^Yh=Z";
它生成以下连接字符串并转义密码。
"UserID=DBA;Password=\"XU5%^Yh=Z\";DatabaseFile=THISSERV;DataSourceName=SERVER"
我怎样才能避免这种情况?前面的示例是正确的,但在我的应用程序中,我实际上也在解密密码,如果不相等,这不会影响任何事情,我尝试将 @ 放在 StringCipher 前面,但它没有用。它看起来像这样,第一个参数实际上是一个变量。
builder.Password = StringCipher.Decrypt("0jURE7f9aTOItD5tgl9E6YoBKhMRaxDVj1KfS0SJ/ZBxIKVVbVYZXHMKgndI", "JlkIUJdfolsdff352345rf")
您需要根据 Odbc ConnectionString escape guidelines:
将密码括在大括号{ }
中
A DSN or connection string value enclosed with braces ({}) that contains any of the characters []{}(),;?*=!@ is passed intact to the driver.
所以这样称呼应该可行:
builder.Password = "{XU5%^Yh=Z}";