OdbcConnection仅在直接输入连接字符串时有效

时间:2016-01-04 12:51:11

标签: c#

我是c#的新手,所以如果这是一个愚蠢的问题,请道歉。我想连接到ODBC数据源。因此,我使用ODBC向导创建了一个数据源。现在我想在我的c#app中使用它。

但在这里我遇到了一些奇怪的行为。如果我使用连接字符串作为输入参数创建连接对象,则连接完美地工作,如下所示:

OdbcConnection conn = new OdbcConnection("DSN=test; UID=testuser; PWD=testpass");

但是如果我首先从文本框和密码框构建连接字符串并使用此字符串作为输入参数:

OdbcConnection conn = new OdbcConnection(ConnectionString);

我收到错误消息:

Error: (IM002) [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified.

以前构建的连接字符串似乎与直接插入的连接字符串完全相同!我通过Debug ...

检查了它

有什么建议吗?

编辑:

以下是我创建字符串的控件:

string uid = "";
private void uid_TextChanged(object sender, TextChangedEventArgs e)
    {
        uid = uid_box.Text;
    }

private void queryButton_Click(object sender, RoutedEventArgs e)
{
String pass = pass_box.Password;
String dsn = "test";
String ConnectionString =
            "DSN = " + dsn + "; " +
            "UID=" + uid + "; " +
            "PWD=" + pass;
OdbcConnection conn = new OdbcConnection(@ConnectionString); //doesn't work
OdbcConnection conn1 = new OdbcConnection(ConnectionString); //doesn't work

3 个答案:

答案 0 :(得分:3)

两个字符串不相等。通过连接输入值创建的那个在DSN的等号周围有空格,即你创建一个字符串" DSN = test; ..."而不是" DSN = test; ...&#34 ;.删除这些空格。

答案 1 :(得分:1)

试试这个

            string test = "abc";
            string testuser = "stu";
            string testpass = @"c:\temp";
            string ConnectionString = string.Format("DSN={0}; UID={1}; PWD={2}", test, testuser, testpass);​

答案 2 :(得分:1)

试试这个:

  var str = new System.Data.Odbc.OdbcConnectionStringBuilder();
  str.Add("Uid", "testuser");
  str.Add("Pwd", "testpass");
  str.DSN = "test";
  var con = new OdbcConnection(str.ConnectionString);

OdbcConnectionStringBuilder的优点是,即使值(例如密码)包含会破坏手册构成的=等字符,它也能正确处理值。