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

8

さて、1 週間かけて頭を悩ませ、ありとあらゆる方法を試した結果、ネットワーク トラフィックを監視しているプログラム (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 frame work form 4.5 から 4.5.1 にアップグレードした後、リモート SQL サーバーに接続できませんでした。4.5.1 フレームワークをアンインストールしたところ、正常に動作するようになりました。

于 2015-09-14T05:39:47.753 に答える