为什么我的OdbcConnection.Open()调用没有返回?

时间:2013-01-17 13:41:29

标签: c# odbc

这是我的代码:

    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过程,但它从未存在过。

2 个答案:

答案 0 :(得分:0)

尝试在类的最低层使用几个变量。

即,制作string connString = "DSN=VIP_Company355"

OdbcConnection conn = new OdbcConnection(connString);

然后使用:conn.Open();

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,那么它们可能值得制作它们的常数,但这完全取决于你。

答案 1 :(得分:-1)

int pleaseReachMe = 5; 

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

Visual Studio Debugger doesnt step into unused variable declarations