2013-01-17 52 views
1

这是我的代码:为什么我不打电话给OdbcConnection.Open()返回?

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程序,但它永远不会存在它。

+0

你是什么意思,它不返回?它仅仅停留在这种方法中吗? Main()方法中的'OdbcConn'? – plast1K

+0

是的,它只是在Open方法中。不,它不在主要方法中,它是一个类中的方法,并且我正在对该方法运行单元测试。 – Cloud9999Strife

+0

什么'Console.WriteLine(odbcConn.ConnectionTimeout);'返回? –

回答

1

我改变了连接字符串如下:

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

我不知道为什么GR_修改工作。

-1
int pleaseReachMe = 5; 

是没有使用局部变量,因此调试器断点不会打的,大概becoz该行会被编译器移除。

Visual Studio Debugger doesnt step into unused variable declarations

+0

我更改了代码,以便使用pleaseReachMe,并在此之后添加了其他随机计算,但仍然没有任何结果。 – Cloud9999Strife

+0

你可以用你的随机计算来编辑问题 –

+0

调试器仍然应该选择那一行,因为它正在做某件事,即使它只是将一个变量赋值给一个值。 – plast1K

0

试着做一对夫妇在变量类的最低层使用。

即,使01​​

一个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,那么值得使用它们的常量,但这完全取决于你。

相关问题