2014-03-14 107 views
7

我创建了一个包含特定字段的窗体。我正在尝试通过ODBC DSN连接与Oracle数据库进行交互。在app.config文件中使用odbc连接字符串Escape;(分号)

我在app.config中的下面的连接字符串中有一个问题。

在连接字符串密码中包含分号(此处为abc; 45)。我得到一个错误:

"Format of the initialization string does not conform to specification starting at index 35"

当我试图访问在C#代码中使用

OdbcConnection connection = new OdbcConnection(connection_string);

此连接字符串。

下面是我的连接字符串。

<add name="ConnectionString_T1" connectionString="DSN=CLA_T5;Uid=abc;Pwd=abc;45" providerName="System.Data.Odbc" /> 

OdbcConnection connection = new OdbcConnection(connection_string); 

PS:我试着把这个密码放在双引号/单引号/ "。但没用。仍然面临这个错误。我试图把所有的转义序列像",双引号,单引号,/”等。

+0

忘记了连接字符串。这里是 Punith

+0

你能告诉我们你是如何分配connection_string变量的连接字符串? – rikitikitik

+0

string connection_string = ConfigurationManager.ConnectionStrings [“CLAConnectionString_T1”]。ConnectionString; – Punith

回答

1

试试这个连接字符串...

<add name="ConnectionString_T1" connectionString="DSN=CLA_T5;Uid='abc';Pwd='abc;45';" providerName="System.Data.Odbc" /> 

我使用相同类型的棘手密码的解决这个问题在这样....

+0

我试过你的方式..但没有运气..现在我的连接字符串看起来像这样DSN = CLA_T5; Uid = CLA_T5; Pwd ='abc; 45' – Punith

+0

检查我的更新.... –

+0

萨加尔,它没有工作..但我试图改变DSN的位置, Pwd as“Uid ='CLA_T5'; Pwd ='abc; 45'; DSN = CLA_T5”..它传递了前面的异常..但打开连接connection.Open();异常被抛出异常是“数据源名称未找到,没有指定默认驱动程序 在System.Data.Odbc.OdbcConnection。“..我检查DSN存在于ODBC管理员在SystemDsn部分 – Punith

-1

尝试其中之一:

<add name="ConnectionString_T1" connectionString="DSN=CLA_T5;Uid=abc;Pwd='abc;45'" providerName="System.Data.Odbc" /> 

<add name="ConnectionString_T1" connectionString="DSN=CLA_T5;Uid=abc;Pwd=&quot;abc;45&quot;" providerName="System.Data.Odbc" /> 

Please take this as a starting point and not as a copy-paste solution

+0

嗨,我已经尝试所有可能的方式逃脱这种半colan like 1. " abc; 45 " 2.'abc; 45'3. \“abc; 45 \”4.abc "; 45 ..在app.config文件中..但是,当我读这个连接字符串,并将其传递给类如OdbcConnection连接=新OdbcConnection(connection_string); ..它thows格式错误.. – Punith

+0

你现在得到了什么错误...格式错误? –

+0

如何使用SQL连接字符串构建器? http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnectionstringbuilder.aspx –

3

显然,ODBC特别是当它涉及到用分号,等号等。根据this,你应该括在大括号{}

connectionString="DSN=CLA_T5;Uid=abc;Pwd={abc;45}" 
+0

试过..但没有运气 – Punith

+1

@Punith看看我的编辑。 ODBC在转义连接字符串时会有所不同。 – rikitikitik

+2

当我把我的密码放在大括号中时,它会被丢弃为无效的用户名/密码错误.. – Punith

0

我遇到了一个类似的特殊字符转义值连接字符串值一个实体框架连接字符串的问题。虽然我没有使用OdbcConnection,但我想我会添加一些对我来说很有帮助的人,以帮助任何与我的问题类似的人。 我们有一个用分号创建的密码。它打破了我们的实体框架连接字符串。错误是:

'Keyword not supported: '[rest of password after semicolon];multipleactiveresultsets'.'

我通过在用户名和密码字段周围放置单引号(')解决了问题。 结果是包含以下内容的连接字符串:

initial catalog=myDB;User  
Id='MyUser';Password='abc;123';multipleactiveresultsets=True; 
+0

这个答案对我来说无效。 – WiredEarp

6

Rikitikitik即将通过周边与{}值在ODBC连接字符串转义[]{(),;?*[email protected]字符部分正确,但错过了微妙但极其重要的ODBC连接字符串逃生规则不是由Microsoft记录有关转义}

PASS CASE: connectionString="DSN=CLA_T5;Uid=abc;Pwd={abc;45}"

正常工作逃脱;,但将失败时密码是

FAIL CASE: connectionString="DSN=CLA_T5;Uid=abc;Pwd={abc;}45}"

因为第一}字符被解释为逃逸对闭括号的,而不是第二个(正确的)}

为解决这个问题,你有第二}

PASS CASE: connectionString="DSN=CLA_T5;Uid=abc;Pwd={abc;}}45}",这将是由ODBC引擎被解读为abc;}45}手动逃脱}

这似乎是一个完全没有记录,尽管几个MSDN来源概述了封闭{}转义Rikitikitik提到。

文件没有提到内部}逃生方法:

然而,内部}遁法是一种快速的.NET测试工具清楚地观察:

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}"); 
} 

其中SomeDriver有一个用户user使用密码abc;}45

相关问题