I have created a windows form with certain fields. I am trying to interact with oracle database through ODBC DSN connections.
I have an issue in the below connection
Rikitikitik is partly correct about escaping []{(),;?*=!@ characters in an ODBC Connection String by surrounding the value with {} , but misses a subtle but extremely important ODBC Connection String escape rule that is NOT documented by Microsoft about escaping }.
PASS CASE: connectionString="DSN=CLA_T5;Uid=abc;Pwd={abc;45}"
Works correctly to escape the ;, but will fail when the password is
FAIL CASE: connectionString="DSN=CLA_T5;Uid=abc;Pwd={abc;}45}"
Because the first } character is interpreted as the closing brace of the escape pair, rather than the second (correct) }.
To correct for this, you have to manually escape the } with a second }
PASS CASE: connectionString="DSN=CLA_T5;Uid=abc;Pwd={abc;}}45}", which will be read as abc;}45} by the ODBC engine.
This appears to be a totally undocumented, despite several MSDN sources outlining the enclosing {} escaping Rikitikitik mentions.
Documentation failing to mention the interior } escape method:
However, the interior } escape method is clearly observable with a quick .net test harness:
OdbcConnectionStringBuilder builder = new OdbcConnectionStringBuilder
builder.Driver = "{SomeDriver}"
builder.Add("UID", "user");
builder.Add("PWD", "abc;}45");
MessageBox.Show(builder.ConnectionString) // observe PWD's escaped value of "{abc;}}45}"
try
{
using (OdbcConnection conn = new OdbcConnection(builder.ConnectionString))
{
//
MessageBox.Show("SUCCEEDED");
}
}
catch (Exception ex)
{
MessageBox.Show($"{ResourceManager.GetString("FAILED: ")} {ex.Message}");
}
where SomeDriver has a user user with password abc;}45