1

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

こんにちは、SQL Server 2005 での開発は初めてです。SQL Server 2000 で数年間働いていますが、サーバーに接続するために通常行うことを行った後、Web サーバーでこの例外が発生します。

考えられる解決策を示すリンクがGoogleにいくつかありますが、どれも私の問題を解決していません。"Surface Area anything..." ダイアログで変更を加えました (これは一体何ですか? なぜ SQL Server はそんなに変更されたのでしょうか? 今では非常に複雑に思えます)。

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

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

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

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

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

Web サイトはまだ接続できません。

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

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

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

connectionString="Data Source=SERVER; Initial Catalog=db; User ID=sa; Password=xxxxx;"

connectionString="Data Source=SERVER\MSSQLSERVER; Initial Catalog=db; User ID=sa; Password=xxxxx;"

奇妙なコマンドを使用してsqlサーバー インスタンスを登録しようとしましたが、次の場所にあることがわかりました 。まだ機能していません...

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

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

4

9 に答える 9

1

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

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

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

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

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

于 2008-09-15T19:56:25.753 に答える
0

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

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

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

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

于 2008-09-16T18:20:50.577 に答える
0

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

統合認証の使用 (Windows):

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

SQL 認証の使用:

UID=ユーザー名; PWD=パスワード; データ ソース =サーバー名; 初期カタログ= DATABASENAME ; ネットワーク ライブラリ = DBMSSOCN ;

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

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

  1. マシンのデスクトップで右クリックし、[新規] -> [テキスト ドキュメント] を選択します。
  2. *.txt ファイルの名前を TestConnect.udl に変更します (名前は .udl 拡張子である必要があるだけで構いません)。アイコンがテキスト ファイル アイコンから、データ グリッドの上にあるコンピュータを示すアイコンなどに変化するはずです (つまり、ウィンドウにはそのアイコンが必要です)。
  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 を繰り返します。

お役に立てれば。

于 2008-09-15T16:02:18.610 に答える
0

プロンプトで次のことを行います。

osql -E -S

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

于 2008-09-15T16:15:00.217 に答える
0

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

また、SQL Server 構成マネージャーをいじり始めました。「SQL Server 2005 Network Configuration」をクリックしてから、「Protocols for InstanceName」を見ましたか? そして、TCP/IP と名前付きパイプを有効にしましたか?

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

SQL Server 2005 Surface Area Configuration ツールを使用して、[Surface Area Configuration for Services and Connections] をクリックし、[Database Engine] --> [Remote Connections] で何が選択されていますか? 名前付きパイプを使用して接続しようとしているように見えるので、[ローカルとリモート接続] と [tcp/ip と名前付きパイプの両方を使用] が選択されていることを確認する必要があります。

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

そして最後のアドバイスです。しばらくこのことから離れて、数分間頭から離れてください。もう一度飛び込むと、以前に見逃したものや見落としていたものを見つけることができます。

于 2008-09-15T19:14:20.863 に答える
0

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

于 2008-09-15T15:22:26.257 に答える
0

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

于 2008-09-15T15:23:00.357 に答える
0

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

于 2008-09-15T15:23:25.863 に答える
0

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

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

于 2008-09-15T15:53:31.220 に答える