这个问题脱离了我提出的关于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错误的边缘。
感谢您的任何建议!