在数据源之间切换时Bizzare ODBC连接失败

时间:2016-08-02 14:23:24

标签: c# .net odbc

这个问题脱离了我提出的关于connection pooling的问题。

使用ODBC我收到以下错误消息:

System.InvalidOperationException: The connection has been disabled. --->     
System.Data.Odbc.OdbcException: ERROR [01000] [Microsoft][ODBC SQL Server Driver]
[DBNETLIB]ConnectionWrite (send()).

ERROR [08S01] [Microsoft][ODBC SQL Server Driver][DBNETLIB]General network error. 
Check your network documentation.

   --- End of inner exception stack trace ---

at System.Data.Odbc.OdbcConnection.ConnectionIsAlive(Exception innerException) ...

以下是每次都可以重现此问题的代码,但只能在单个客户端计算机上运行(客户端是Windows 7 64位,.NET 4.5.2,SQL Server Express,Adagio ODBC)

try
{
using (var dyn = new OdbcConnection("dsn=test;UID=test;PWD=test")) // uses ODBC for sql server
{
    dyn.Open();
    using (var cmd = new OdbcCommand("SELECT * FROM COMPANY", dyn))
    {
        using (cmd.ExecuteReader())
        {

        }
    }
    dyn.Close();
}

using (var dyn = new OdbcConnection("dsn=Adagio Data Source")) // uses 3rd party ODBC
{
    dyn.Open();
    using (var cmd = new OdbcCommand("SELECT COMPANY FROM AL92AGLO", dyn))
    {
        using (cmd.ExecuteReader())
        {

        }
    }
    dyn.Close();
}

using (var dyn = new OdbcConnection("dsn=test;UID=test;PWD=test"))
{

    dyn.Open(); // EXCEPTION THROWN !!!

    using (var cmd = new OdbcCommand("SELECT * FROM COMPANY", dyn))
    {
        using (cmd.ExecuteReader())
        {

        }
    }
    dyn.Close();
}
catch(Exception ex)
{
     MessageBox.Show(ex.ToString())
}

因此,当使用ODBC连接到SQL服务器时连接工作正常,然后我可以连接到第三方ODBC(Adagio)但是当我再次尝试连接到SQL服务器时,我得到了#34;连接已被禁用&# 34。

最初我试图使用SqlConnection对象,但它会通过我无法捕获的异常并且应用程序崩溃:

System.AccessViolationException
<Module>.SNIOpenSyncExWrapper(SNI_CLIENT_CONSUMER_INFO*, SNI_ConnWrapper**)
at SNINativeMethodWrapper.SNIOpenSyncEx(ConsumerInfo, System.String, IntPtr ByRef, Byte[], Byte[], Boolean, Boolean, Int32, Boolean)
at System.Data.SqlClient

谷歌搜索我发现一篇文章表明.NET 4.5.1可能会发生这种情况。客户端确实有.NET 4.5.1,所以我们更新到.NET 4.5.2,但没有解决问题。

如果我在使用ODBC连接失败后再尝试连接,它可以工作,但我的应用程序框架使用SqlConnection,这会引发一个无法捕获的异常,所以我不能再简单地再试一次。

我觉得我正处于第三方实现ODBC和Microsoft .NET错误的边缘。

感谢您的任何建议!

0 个答案:

没有答案