1

这是我的代码:

    OdbcConnection odbcConn = new OdbcConnection("DSN=VIP_Company355");

    try
    {
        odbcConn.Open();
        int pleaseReachMe = 5;
    }
    catch (Exception ex)
    {

    }

当调试器到达

    odbcConn.Open(); 

它不会返回,也不会抛出异常。文档说默认超时为 15 秒。但经过 15 秒后,没有抛出异常。此外,如果我用一个无意义的值替换我的连接字符串,它会立即引发错误。

有任何想法吗?

编辑:

我启用了 ODBC 数据源管理员的跟踪,它在日志文件中留下了以下内容:

parentProcessId 1518-2754   ENTER SQLDriverConnectW 
    HDBC                0x005BF570
    HWND                0x00000000
    WCHAR *             0x63118B34 [      -3] "******\ 0"
    SWORD                       -3 
    WCHAR *             0x63118B34 
    SWORD                       -3 
    SWORD *             0x00000000
    UWORD                        0 <SQL_DRIVER_NOPROMPT>

(为简洁起见,仅包括最后一条语句)它进入了 SQLDriverConnectW 过程,但它从不存在。

4

3 回答 3

1

我将连接字符串更改为以下内容:

"DSN=VIP_Company355;GR_UID=userName;GR_PWD=myPass;"

我不确定为什么 GR_ 修改有效。

于 2013-01-18T12:43:39.573 回答
0

尝试制作几个变量以在班级的最低层使用。

即,做一个string connString = "DSN=VIP_Company355"

一个OdbcConnection conn = new OdbcConnection(connString);

然后使用:conn.Open();

IE

public void SomeFunction()
{    
    string connString = "DSN=VIP_Company355";

    if (OpenConnection(connString))
    {
        MessageBox.Show("Connection Established");
    }
}

public bool OpenConnection(string connString);
{
    try 
    {            
        OdbcConnection conn = new OdbcConnection(connString);

        conn.Open();

        return true;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message());

        return false;
    }
}

编辑:

语法什么的。只是关于将这些变量放在类的顶部的注释。这不是必需的,但是如果您发现您正在重用您的连接字符串或您的 OdbcConnection,那么将它们设为常量可能是值得的,但这完全取决于您。

于 2013-01-17T14:25:23.590 回答
-1
int pleaseReachMe = 5; 

是一个没有使用的局部变量,因此调试器断点不会命中,可能是因为编译器将删除该行。

Visual Studio 调试器不会进入未使用的变量声明

于 2013-01-17T13:47:27.277 回答