41

以下は私の接続文字列です:

connectionString="metadata=res://*/EDMX.Test.csdl|res://*/EDMX.Test.ssdl|res://*/EDMX.Test.msl;provider=System.Data.SqlClient;provider connection string="Data Source=home_computer;Initial Catalog=db_Test;Persist Security Info=True;User ID=testUser;Password=$1234;MultipleActiveResultSets=True""

プログラムがスタックしたコードは次のとおりです。

EDMX.TestingEntity context = new EDMX.TestingEntity();

var query = from t in context.User
            where t.UserName == _userName
            select t;

上記のコードを実行した後、変数クエリを確認したところ、例外が見つかりました

基になるプロバイダーが Open で失敗しました。

私はチェックしました:

  1. サーバーとコンピューター間の接続は正常です
  2. ユーザー名 testuser とパスワード $1234 でデータベースにログインできます
  3. データベース (SQL Server) のセキュリティ設定を確認したところ、testUser にアクセス許可が付与されました

なぜこの例外が発生するのですか? 私は.net 4.5を使用しています


追加した:

もう一度試してみて、内部例外を確認したところ、SQL Server への接続を確立中にネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。(プロバイダー: 名前付きパイプ プロバイダー、エラー: 40 - SQL Server への接続を開けませんでした)

ネットワークの問題である可能性があることはわかっていますが、サーバーとコンピューターのファイアウォールをオフにして、再試行しましたが、まだ成功していません..


ちょうど今、この接続をテストするために接続文字列をプログラムにコピーしましたが、うまく機能していました..


すべての変更をロールバックして再度テストしたところ、うまくいきました

4

20 に答える 20

15
  1. プログラムとファイルで「コンポーネント サービス」を検索
  2. サービスに移動
  3. 「分散トランザクション コーディネーター」サービスを探す
  4. 右クリックしてサービスを再起動します

サービスを再起動したところ、コードはエラーなしで実行されるはずです

于 2015-04-23T10:38:13.097 に答える
5

内部例外がある場合は常にチェックしてください。私の場合、Inner Exception は問題を解決するのに非常に役立ちました。

私のサイトは開発環境で正常に動作していました。しかし、本番環境にデプロイした後、この例外が発生し始めましたが、内部例外は、特定のユーザーのログインが失敗したことを示していました。
だから私はそれが接続自体と関係があると考えました。そのため、SSMS を使用してログインしようとしましたが、それでも失敗しました。

最終的に、SQLサーバーでWindows認証のみが有効になっていて、認証に使用していたSQL認証が失敗したという単純な理由で例外が発生したことがわかりました。

つまり、認証を混合 (SQL と Windows) に変更すると、問題が解決しました。:)

于 2016-04-20T01:01:31.090 に答える
3

クライアントからこのエラーが報告されました。彼が *.ldf ファイルをいじっていたことがわかりました。彼は 1 つのデータベースに *ldf ファイルをコピーし、2 番目のデータベースと一致するように名前を変更しました (フォルダーに配置するように依頼しました)。

同じシナリオを再現したところ、開発システムで同じエラーが発生しました。*ldf ファイルを削除した後、エラーが修正されました。

于 2015-01-08T16:55:04.897 に答える
2

それが通常起こり始めるとき、私はサービスにリモートデスクトップし、少なくともIISを再起動する必要があります。通常、コードをデプロイした直後にポップアップし始めます。まれに、SQL サービスと IIS を再起動する必要がありました。パラメータ (1 または 2) を受け取るバッチ スクリプトを作成し、IIS の再起動 (つまり 1) を実行するか、完全な核 (つまり 2) に移行するようにセットアップしました。

于 2016-04-18T12:57:35.880 に答える
2

開発マシンで実行しているときに、特にコードを変更し、コードを再構築してから、関連する Web ページを実行した後に、この例外が頻繁に発生します。ただし、CommandTimeout パラメータを 120 秒以上に上げると (たとえば、LINQ ステートメントの前に context.Database.CommandTimeout = 120 を設定すると)、問題は解決します。これはもともと3年前に尋ねられたものですが、答えを探している人に役立つかもしれません. 私の理論では、VisualStudio はビルドされたバイナリ ライブラリをマシン コードに変換するのに時間がかかり、そのジャスト イン タイム コンパイルに続いて SQL Server に接続しようとするとタイムアウトします。

于 2016-08-26T00:42:11.607 に答える
1

このエラーが発生しましたが、App.config の接続文字列のタイプミスが原因でした。

于 2016-12-06T04:06:35.037 に答える
0

ローカルの .mdf ファイルを使用している場合、おそらく Dropbox などの同期ソフトウェアが 2 つの異なるコンピューターで 2 つのログ ファイル (.ldf) を同期しようとした可能性があります。bin ディレクトリからログ ファイルを削除し、.mdf プロパティを確認してください -> コピー出力ディレクトリへ -> 新しい場合はコピーを選択すると、選択した DB ファイルとそのログが bin ディレクトリにコピーされます。!アラート - DB ファイルが bin ディレクトリでのみ変更された場合、すべての変更は破棄されます!

于 2015-01-23T07:32:14.667 に答える
0

これを試してください-管理者としてコマンドプロンプトを開き、次の netsh Winsock resetを入力します

システムを再起動して、もう一度やり直してください。

于 2014-07-18T17:30:18.853 に答える