SQL Server 2005 では、同じサーバー上で実行されている Web サイトへの接続に問題が発生します。

StackOverflow https://stackoverflow.com/questions/63875

質問

サーバーへの接続を確立中にエラーが発生しました。SQL Server 2005 に接続する場合、この失敗は、デフォルト設定では SQL Server がリモート接続を許可していないことが原因である可能性があります。(プロバイダー:名前付きパイププロバイダー、エラー:40 - SQL Server への接続を開けませんでした)

こんにちは。SQL Server 2005 での開発は初めてです。私は数年間 SQL Server 2000 を使用してきましたが、通常どおりサーバーに接続すると、Web サーバーでこの例外が発生します。

Google には考えられる解決策を示すリンクがいくつかありますが、どれも私の問題を解決しませんでした。「表面積を何でも...」ダイアログで変更を加えました(一体これは何ですか?SQL Server はなぜこれほど変わったのでしょうか?今ではとても複雑に思えます)。

SQL Server 2005 がデータベース サーバーのインスタンスで受信接続を許可するように適切に構成されていることを確認しました。私も選択しました 自動 システムが起動するたびに SQL Server Browser サービスを自動的に開始するには、スタートアップの種類として指定します。いいえ、ファイアウォールは実行されていません。

ポートを使用して接続する、IPを使用して接続する、インスタンス名を使用して接続するように接続文字列を変更しようとしました...

何も機能していないようで、まだ同じエラーが発生します。何かヒントはありますか?

人々から寄せられた質問に答えると、次のようになります。はい、別のコンピューターから Management Studio を使用して接続できます。はい、ローカルおよびリモートの TCP/IP と名前付きパイプを受け入れるように構成されていると思います。はい、サーバーを再起動しました。

混合モードのセキュリティを使用していますが、これはすでに有効になっています。sa ユーザーはすでに有効にしています。.udl ファイルを使用してデータベースに接続でき、接続文字列に問題がないことを確認しました。DBArtisan および SQL Server クライアント ツールを使用してデータベースに接続できます。これはサーバー上と別のマシンの両方で行うことができます。それにもかかわらず...

ウェブサイトはまだ接続できません。

新しいアップデート...私は一日中この問題と格闘していますが、まだ原因がわかりません。私が投稿したエラー メッセージは、.net が接続できないときに表示される一般的なエラーのようです。接続文字列にゴミ箱を配置しました (存在しないサーバーを入力しました) が、依然として同じエラーが発生します。

以下は、サーバーで使用した接続文字列の一部です。

connectionString="統合セキュリティ=SSPI;データソース=サーバー;初期カタログ=db;ネットワーク ライブラリ=DBMSSOCN;"

connectionString="データソース=サーバー;初期カタログ=db;ユーザーID=sa;パスワード=xxxxx;"

connectionString="データ ソース=SERVER\MSSQLSERVER;初期カタログ=db;ユーザーID=sa;パスワード=xxxxx;"

奇妙なコマンドを使用して SQL サーバー インスタンスを登録しようとしました。次のことがわかりました。http://kb.discountasp.net/article.aspx?id=1041これを行うには、aspnet_regsql.exe ツールを使用しました。まだ機能していません...

また、サーバーに最新バージョンの MDAC がインストールされていることもわかります。唯一疑わしいのは、サーバーに 2 つのデータベース エンジンがあることです。SERVERとserver\sqlexpress

それは問題と何か関係がありますか?

役に立ちましたか?

解決 9

接続で発生していた問題を修正しました。問題は私のアプリケーションにありました。この問題の原因は、(本番環境ではなく) 開発データベースへの接続文字列が、データセットを生成するダイアログの 1 つによってハードコーディングされていたことでした。このダイアログは、接続文字列を web.config と「Settings.settings.cs」という非表示のソースコード ファイルの両方に配置しました。この問題は、接続文字列を正しい場所に修正することで解決されました。

エラー メッセージは完全に誤解を招くものでしたが、スタック トレースに示されているすべての方法に従うことで、それを見つけることができました。

したがって、このエラー メッセージを見つけた場合は、考えられる原因がたくさんあります。最初の方法は、このエラーに対する通常の手順に従うことです。つまり、サーバーがリモート接続とローカル接続を許可していることを確認し、ブラウザ サービスを再起動します。

これが機能しない場合は、スタック トレースを確認し、アプリケーション内のコードを探し、そこにブレーク ポイントを置き、接続文字列のすべてのプロパティを調べます。少なくとも私はそうやって解決しました。

他のヒント

唯一疑わしいのは、サーバーに 2 つのデータベース エンジンがあることです。SERVERとserver\sqlexpress

これが問題の根源だと思います。どちらに接続するつもりですか?接続先の「インスタンス」を指定する必要があります。

SERVER インスタンスに接続すると仮定すると、接続文字列は次のようになります (デフォルトのインスタンス名を想定)。

データソース=あなたのサーバー\MSSQLサーバー;初期カタログ=db;ユーザーID=sa;パスワード=xxxxx;

SQL Express の場合、接続文字列は次のようになります。データソース=あなたのサーバー\sqlexpress;初期カタログ=db;ユーザーID=sa;パスワード=xxxxx;

別のマシンから Management Studio 経由で SQL Server に接続できますか?これは、SQL Server 構成なのか接続文字列構成なのかを絞り込むのに役立つ場合があります。

サーフェスエリアの構成を再確認し、TCP/IP 接続が許可されていることを確認してください。

これには多くのことが考えられます。最初に確認するのは、SQL Server Management Studio を使用してサーバーに接続できることを確認することです。次に、接続文字列が正しいことを確認します。表面積構成はローカル接続には適用しないでください。

最新の MDAC をサーバーに再インストールしてみてください。私もかつて同様の問題を抱えていましたが、これで解決しました。

[http://www.microsoft.com/downloads/details.aspx?familyid=6c050fe3-c795-4b7d-b037-185d0506396c&displaylang=en][1]

エラーによると、コードは TCPIP ではなく名前付きパイプを使用して接続しようとしているようです。実際には、SQL プロバイダーが tcpip を使用して接続する必要があることを接続文字列で具体的に指定する必要がある場合があります。その場合、接続文字列は次のようになります。

統合認証の使用 (Windows):

統合セキュリティ=SSPI;データソース=サーバーの名前;初期カタログ=データベース名; ネットワーク ライブラリ=DBMSSOCN;

SQL 認証の使用:

UID=ユーザー名;障害者=パスワード;データソース=サーバーの名前;初期カタログ=データベース名; ネットワーク ライブラリ=DBMSSOCN;

これと似たようなことが以前に起こったのを見たことがあります。特に、Web アプリケーションと SQL サーバーの両方が同じマシン上で実行されているため、何らかの理由で「名前付きパイプ」がデフォルトでトランスポート/接続層として使用されます。私は通常、常に tcpip をトランスポートまたはネットワーク ライブラリとして使用します。

もう 1 つのトラブルシューティング手法は、UDL (またはデータ リンク ファイル) を使用して接続のトラブルシューティングを行うことです。これにより、接続プロバイダー (ODBC、OLEDB など) を切り替えたり、他の接続オプションを設定したりできます。

  1. マシンのデスクトップで右クリックし、[新規] -> [テキスト ドキュメント] を選択します。
  2. *.txt ファイルの名前を TestConnect.udl に変更します (名前は重要ではなく、拡張子が .udl である必要があります)。アイコンがテキスト ファイルのアイコンから、データ グリッド上にコンピューターを表示するアイコン、またはそのようなものに変わるはずです (つまり、Windows にはコンピューターのアイコンが表示されるはずです)。
  3. ファイルをダブルクリックすると、「データ リンク プロパティ」アプレットが表示されます。
  4. 「プロバイダー」タブをクリックすると、さまざまな接続プロバイダーのリストが表示されます。まずは「Microsoft OLE DB Provider for SQL Server」を選択します。これを使用して、OLE DB が接続できるかどうかを確認できます。
  5. [次へ] をクリックし、サーバー名または IP アドレスを入力します。[Windows NT 統合セキュリティ] を選択します。(いつでも戻って、SQL ログインを使用するように変更できます。) この時点で、[接続のテスト] をクリックできます。接続が成功した場合は、ドロップダウン リストからデータベース名を選択します。
  6. 最後に、接続が失敗した場合は、「すべて」タブを選択し、「ネットワーク ライブラリ」を探してその値を編集し、「DBMSSOCN」に設定します。
  7. 接続タブに戻り、もう一度「接続テスト」をクリックします。
  8. 今度は「SQL Native Client」を選択して手順 4 と 5 を繰り返します。

お役に立てれば。

プロンプトで次の操作を実行します。

osql -E -S

...> プロンプトが表示されますか?

接続文字列にインスタンス名を指定してみましたか?どうやら SQL Server Express は、特にインスタンス名にこだわるようです。

SQL Server 構成マネージャーもいじり始めました。それで、[SQL Server 2005 ネットワーク構成] をクリックして、[プロトコル] を見ましたか? インスタンス名「?TCP/IP と名前付きパイプを有効にしましたか?

「SQL Native Client Configuration」->「Client Protocols」も確認しました。そこでも TCP/IP と名前付きパイプが有効になっていることがわかりますか?

SQL Server 2005 サーフェス エリア構成ツールを使用して、[サービスと接続のサーフェス エリア構成] をクリックし、[データベース エンジン] --> [リモート接続] で何が選択されていますか?名前付きパイプを使用して接続しようとしているようですので、「ローカル接続とリモート接続」および「tcp/ip と名前付きパイプの両方を使用する」が選択されていることを確認する必要があります。

おそらくご存知のとおり、変更を加えたら、Management Studio を介して SQL サーバー インスタンスを停止して再起動する必要があります (マシン全体を再起動する必要はありませんが、マシン全体を再起動すると再起動できます)。

そして最後のアドバイスです。しばらくこのことから離れて、数分間心を忘れてください。もう一度考えてみると、これまで見落としていたものや見落としていたものに気づくかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top