8

这是我得到的错误:

无法连接到服务器 MYSERVER。(Microsoft.SqlServer.ConnectionInfo)

附加信息:

尝试读取或写入受保护的内存。这通常表明其他内存已损坏。(系统.数据)

我在使用实体框架运行任何查询时遇到此错误,例如像这样的任何行:

var AllRows = context.MyTableRows.ToList();

我以为是 EF 的问题,但后来我尝试使用 VS2012 中的 Transact Sql Editor 连接到数据库,以便查询它,尝试连接时出现相同的错误。

但是我有其他非 Microsoft 查询工具可以连接到数据库并对其进行查询,而不会导致错误。所以我认为问题出在 Microsoft 驱动程序或 System.Data.SqlClient 中,但我无法弄清楚问题出在哪里。

更新:我尝试在 LinqPad 中连接到同一台服务器,当我尝试连接时它只是挂起。

更新:堆栈跟踪很长,看起来像这样:

at SNIAddProvider(SNI_Conn* , ProviderNum , Void* )
at SNINativeMethodWrapper.SNIAddProvider(SafeHandle pConn, ProviderEnum providerEnum, UInt32& info)
at System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean& marsCapable)
at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover)
at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover)
at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout)
at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
at System.Data.EntityClient.EntityConnection.Open()
at System.Data.Objects.ObjectContext.EnsureConnection()
at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
at System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__2[TResult](IEnumerable`1 sequence)
at System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot)
at System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[S](Expression expression)
at System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[TResult](Expression expression)

...我的应用程序中尝试执行 EF 查询的行...

4

4 回答 4

20

从 .NET 4.5 升级到 .NET 4.5.1 后,我遇到了同样的问题。当我尝试使用 Entity Framework 访问任何内容时,我得到了那个错误。为我解决的问题是运行此命令(在管理员提示符下):

netsh winsock reset

然后重新启动。

于 2013-12-10T10:42:05.730 回答
8

好吧,经过一个星期把头发扯下来并尝试了各种绝望的措施后,我终于能够通过卸载一个监控网络流量的程序(Cucusoft Net Guard)来解决这个问题。该程序似乎干扰了数据包流量中的某些内容,并导致了我的错误。卸载这个应用程序解决了这个问题,但奇怪的是,关闭它并没有。它必须安装了一个低级别的过滤器,即使应用程序没有运行,它也会导致问题。

于 2013-09-27T02:20:15.790 回答
0

根据这个,“无论如何,解决方案是启用 JIT 优化。换句话说,在 Visual Studio 2008 中选择“工具”,然后选择“选项”。选择“调试”和“常规”并找到显示“抑制 JIT 优化”的行模块加载”。这种方法可以确保调试器和 JIT 编译的代码不会运行不同步,因为 JIT 编译器是你代码的超级优化器。这成功了。”

检查出。如果它不起作用,请尝试使用 SQL Server Management Studio 连接到数据库。如果可以,该错误可能与 Visual Studio 相关。

于 2013-09-26T00:56:20.140 回答
0

当我连接到远程 sql 服务器时,我的 SQL Server 2014 Express Edition 遇到了同样的问题。

尝试读取或写入受保护的内存。这通常表明其他内存已损坏。(系统.数据)

我升级到 .net 框架从 4.5 到 4.5.1 升级后我无法连接到远程 sql 服务器。现在我已经卸载了 4.5.1 框架,现在它工作正常。

于 2015-09-14T05:39:47.753 回答