7

C# アプリケーション内から DB 接続を開こうとすると、次のエラーが表示されます。このエラーは、おそらく以前に何百もの質問に表示されたことがあると思います。ただし、このシナリオでは、特定のデスクトップ PCで実行されているC# アプリでのみエラーが表示されます。Google やこの Web サイトでインターネットを調べましたが、解決策が見つかりません。

エラー:

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

このシナリオがユニークな理由:

SQL Server Management Studio (SSMS)から SQL サーバーに接続できます。このアプリケーションは別のコンピューターで動作し、そこから SQL サーバーへの接続を確立できます。したがって、このエラー シナリオは、特定のデスクトップ PC で実行されている C# アプリケーションに固有のものです。他のアプリは機能します (SSMS)。他のPCの仕事。

WireShark を使用して「ワイヤをスニッフィング」すると、アプリが NamedPipes (つまり、\Server\IPC$) 経由で接続しようとしていることがトレースに示されます。TCP/IP の使用を強制することはできないようです。

私が試したこと:

  • 再インストールされた.NET Framework
  • Visual Studio の再インストール (C# - Express バージョン 2010)
  • cliconfg.exe 内にエイリアスを作成しました。

私が逃したものはありますか?

これが私が試した接続文字列です...

Data Source=<servername>;Initial Catalog=HIE;Integrated Security=true
Server=tcp:10.240.11.81;Integrated Security=SSPI; database=HIE
Data Source=10.240.11.81,1433;Network Library=DBMSSOCN;Initial Catalog=HIE;User ID=<SqlUserIdThatISetUpAsSysAdmin>;Password=<password>

コード スニペットは次のとおりです。

_conn = new SqlConnection();    // _conn declared globally
_conn.ConnectionString = <the connection string above>;
_conn.Open();
4

3 に答える 3

2

最も可能性の高いシナリオは、Windows ファイアウォールが SQL Server 通信をブロックしていることです。MSDN から (名前付きパイプに関する記事ですが、それにもかかわらず関連があります):

Microsoft Windows XP Service Pack 2 では Windows ファイアウォールが有効になり、デフォルトでポート 445 が閉じられます。Microsoft SQL Server はポート 445 を介して通信するため、SQL Server が名前付きパイプを使用して着信クライアント接続をリッスンするように構成されている場合は、ポートを再度開く必要があります。ファイアウォールの構成の詳細については、SQL Server Books Online の「SQL Server アクセス用にファイアウォールを構成する方法」を参照するか、ファイアウォールのドキュメントを確認してください。

もう 1 つのシナリオは、ローカル マシンのクライアント構成が正しく構成されていないことです。実行プロンプトからcliconfg(SQL Server クライアント構成ユーティリティ) を実行して、有効なプロトコルと、プロトコルに使用されるエイリアスを確認できます。

于 2013-07-11T22:36:50.687 に答える
0

usr のコメントで提案されているようにデータ ソースを再定義するか、TCP 接続を許可するように SQL Server を構成します (とにかく TCP 接続を許可しないのはなぜですか?)。

SQL ServerでTCPを有効にするためのリンクは次のとおりです(受け入れられた答えは、見たい場所です):

SQL Server Express 2012 のリモート接続を有効にする

于 2013-07-11T22:07:50.373 に答える