none
.\sqlexpressに接続できない RRS feed

  • 質問

  • 自PC内でVB.net ExpressからSQL Server Expressに接続しようとしているのですがうまく接続できません。

    以下のコマンドでエラーとなります。

    c:\> sqlcmd -E -S .\SQLEXPRESS

    HResult 0xFFFFFFFF、レベル 16、状態 1
    SQL ネットワーク インターフェイス : 指定された Server/Instance の位置を特定して
    いるときにエラーが発生しました [xFFFFFFFF].
    Sqlcmd: エラー: Microsoft SQL Native Client: サーバーへの接続確立時にエラーが発
    生しました。接続先が SQL Server 2005 である場合は、既定の設定では SQL Server が
    リモート接続を許可していないことが原因である可能性があります。。
    Sqlcmd: エラー: Microsoft SQL Native Client: ログイン タイムアウトが時間切れにな
    りました。

    しかし、以下のコマンドでは正常に"1>"が返ってくきます。

    c:\> sqlcmd -E -S <コンピュータ名>\SQLEXPRESS

    "."とコンピュータ名では何かちがうのでしょうか?

    いろいろ試したのですが、関連する設定が見あたりませんでした。

    ご指導よろしくお願いします。

    2006年4月4日 4:09

回答

  • すみません、自己レスです。

    Books Online に答えが書いてありました (汗)

    既定のクライアント接続の動作
    http://msdn2.microsoft.com/ja-JP/library/ms190204(SQL.90).aspx

    以下、Books Online の引用です。

    セキュリティ強化のため、SQL Server 2005 の Developer、Evaluation、および Express エディションの新規インストールではサーバーへの TCP/IP による接続が無効になっています。MDAC 2.8 を使用して接続する OLEDB アプリケーションでは、"."、"(local)"、または (<空白>) をサーバー名として使用してローカル サーバーの既定のインスタンスに接続することができません。これを解決するには、サーバー名を指定するか、そのサーバーの TCP/IP を有効にします。ローカルの名前付きインスタンスへの接続および SQL Native Client を使用した接続は、影響を受けません。以前のバージョンの SQL Server が存在する環境も、影響を受けないことがあります。

    2006年4月4日 7:07
  • お調べいただきありがとうございます。

    教えていただいたURLに以下のように書いてあり、調べたところSQL Server Browser が停止されていました。

    既定のクライアント接続の動作
    http://msdn2.microsoft.com/ja-JP/library/ms190204(SQL.90).aspx

    クライアント ネットワーク ライブラリ (SQL Native Client) をクライアント コンピュータにインストールすると、すぐにそのクライアントでデータベース エンジン のインスタンスに接続できるようになります。通常、データベース エンジン インスタンスに接続するために、Microsoft SQL Server 2005 クライアントで特別な構成を行う必要はありません。クライアント アプリケーションで指定する必要がある情報は、コンピュータ名とインスタンス名だけです。SQL Server Browser サービスがサーバーで実行されていない場合は、接続のエンドポイント (TCP/IP ポートまたは名前付きパイプ) を指定して名前付きインスタンスに接続する必要があります。

    SQL Server Browser サービスを起動したところ接続が可能になりました。
    ありがとうございました。

    2006年4月5日 0:32

すべての返信

  • 松本です。こんにちは
    私の環境もそうだったのですが、

    . (どっと) や  (local)  だと共有メモリ接続 (LPC) にはならず、
    コンピュータ名を記述した場合は共有メモリ接続?? になるという現象がありました。

    SQL Server 2000 では、. も (local) も コンピュータ名 も共有メモリ接続を行なうための
    記述で同じ意味だったのですが、私の環境の SQL Server 2005 では違っていました
    (現在、どういう状況で発生するのか調査中です...)

    今のところ確認しているのは

    ADO (OLEDB Provider) で

    Set conn = New ADODB.Connection
    conn.Open "Provider=SQLOLEDB;" _
            & "Data Source=(local);"

    のような記述だと接続できず、Data Source=コンピュータ名
    にすると、なぜか名前付きパイプ (Named Pipes) による接続が OK です。
    (リモート接続はオフの状態です。. も localhost も NG)

    ADO.NET 2.0 で

    Imports System.Data.SqlClient
     :
    Dim conn As New SqlConnection()
    conn.ConnectionString = "Data Source=(local);Integrated Security=SSPI"
    conn.Open

    は接続 OK。
    Data Source= のところは . でもコンピュータ名でも localhost でも共有メモリ接続
    (SELECT net_library,program_name,* FROM sysprocesses で確認可能)

    Imports System.Data.OleDb
     :
    Dim conn As New OleDbConnection
    conn.ConnectionString = "Provider=SQLOLEDB;Data Source=(local);Integrated Security=SSPI"
    conn.Open()

    のように OLEDB 接続にすると、ADO のときと同じ結果で NG。
    (local)、 .  、 localhost は NG
    コンピュータ名は 接続 OK (なぜか名前付きパイプでの接続)


    ちなみに、リモート接続を有効にすると、ADO (OLEDB) でも
    . や (local) と記述した共有メモリ接続ができるようになるのですが、
    ちょっとふに落ちないですね。


    私の環境は SQL Server 2005 が既定のインスタンスでインストールしており、
    その後に SQL Server 2000 を名前付きインスタンスとして後からインストールしてます。

    2006年4月4日 6:47
  • すみません、自己レスです。

    Books Online に答えが書いてありました (汗)

    既定のクライアント接続の動作
    http://msdn2.microsoft.com/ja-JP/library/ms190204(SQL.90).aspx

    以下、Books Online の引用です。

    セキュリティ強化のため、SQL Server 2005 の Developer、Evaluation、および Express エディションの新規インストールではサーバーへの TCP/IP による接続が無効になっています。MDAC 2.8 を使用して接続する OLEDB アプリケーションでは、"."、"(local)"、または (<空白>) をサーバー名として使用してローカル サーバーの既定のインスタンスに接続することができません。これを解決するには、サーバー名を指定するか、そのサーバーの TCP/IP を有効にします。ローカルの名前付きインスタンスへの接続および SQL Native Client を使用した接続は、影響を受けません。以前のバージョンの SQL Server が存在する環境も、影響を受けないことがあります。

    2006年4月4日 7:07
  • お調べいただきありがとうございます。

    教えていただいたURLに以下のように書いてあり、調べたところSQL Server Browser が停止されていました。

    既定のクライアント接続の動作
    http://msdn2.microsoft.com/ja-JP/library/ms190204(SQL.90).aspx

    クライアント ネットワーク ライブラリ (SQL Native Client) をクライアント コンピュータにインストールすると、すぐにそのクライアントでデータベース エンジン のインスタンスに接続できるようになります。通常、データベース エンジン インスタンスに接続するために、Microsoft SQL Server 2005 クライアントで特別な構成を行う必要はありません。クライアント アプリケーションで指定する必要がある情報は、コンピュータ名とインスタンス名だけです。SQL Server Browser サービスがサーバーで実行されていない場合は、接続のエンドポイント (TCP/IP ポートまたは名前付きパイプ) を指定して名前付きインスタンスに接続する必要があります。

    SQL Server Browser サービスを起動したところ接続が可能になりました。
    ありがとうございました。

    2006年4月5日 0:32
  • SQL Server Browser を起動しておいてなら繋がるということは,
    本当に共有メモリで繋がっているのかちょっと気になります。

    > sqlcmd -E -S .\sqlexpress

    で繋いでおいて,ヘルプにも説明があるけど,

    1> SELECT net_transport 
    2> FROM sys.dm_exec_connections 
    3> WHERE session_id = @@SPID;
    4> go
    で確認すると,共有メモリならば
    net_transport
    ----------------------------------------
    Shared memory
    のように現在の接続が,Shared memory なことを確認できると思います。
    というか,確認してもらえると情報が手に入ってうれしいというか(汗)。
    2006年4月5日 11:24
  • 調べてみました。

    net_transport
    ----------------------------------------
    TCP

    TCPで接続されています。

    試しにコンピュータ名でもやってみましたが、どちらもTCPの様です。
    設定では共有メモリ接続もちゃんと有効になってます。
    なにかおかしいのでしょうか?

    2006年4月6日 0:27
  • SQL Server Configuration Manager を起動して,
    + SQL Native Client の構成 の クライアントプロトコル をクリックして,
    右側で,共有メモリ の順位が 1 になっているでしょうか?
    (といっても,1 でしょうね...)

    2006年4月6日 0:49
  • 1になってます。
    1以外には設定できない様ですね。
    2006年4月6日 1:20
  • WinXP Pro SP2 の最新状態のまっさらの状態に,
    VC#2005 Express を入れてみました。
    結果,SQL Browser を起動していない状態でも
    -S .\sqlexpress で繋がるし,共有メモリになっていました。

    OSは,なんでしょうか?
    OS側のなにかで違っているとか...

    追記: VB2005Expressだったんですね...,それで試せばよかったですね。

    2006年4月6日 23:31