-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
サーバーへの接続を確立しているときにエラーが発生しました。SQL Server 2005 に接続しているときときにこのエラーが発生した場合は、SQL Server の既定の設定がリモート接続を許可しないようになっていることがエラーの原因である可能性があります。 (provider: 名前付きパイプ プロバイダ, error: 40 - SQL Server への接続を開けませんでした)
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。
例外の詳細: System.Data.SqlClient.SqlException: サーバーへの接続を確立しているときにエラーが発生しました。SQL Server 2005 に接続しているときときにこのエラーが発生した場合は、SQL Server の既定の設定がリモート接続を許可しないようになっていることがエラーの原因である可能性があります。 (provider: 名前付きパイプ プロバイダ, error: 40 - SQL Server への接続を開けませんでした)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
最初:2008年6月8日 11:29
最後:2008年6月10日 0:28
このエラーに一番苦しめられた。TCP/IPならまだしも名前付きパイプでなんて…しかも、最終的に解決した理由が分らない。
Index
・デフォルトではネットワーク接続が無効!
・ネットワーク接続を有効化するには?
・使用するポートは TCP 1433
・Windows XP SP2 の場合
・ホスト名解決も必要
・名前付きインスタンスは動的ポートと UDP 1434 も例外へ追加
http://blogs.sqlpassj.org/matu_tak/archive/2006/03/22/16481.aspx
リモート接続が許可されるように SQL Server 2005 を構成する方法
http://support.microsoft.com/kb/914277#
「SQL Server 2005 Express または SQL Server 2005 Developer Edition でリモート接続を有効にする」は実行した。
「Windows ファイアウォールで SQL Server 2005 に対する例外を作成する」と「Windows ファイアウォールで SQL Server Browser サービスに対する例外を作成する」は、ノートパソコンのNorton Internet Securityのファイアウォール:プログラム制御で、C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exeを許可した。C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exeは既に設定されていた。
SQL Server 2005 Tips and Tips
第 1 回 ネットワーク接続を有効化しよう
http://www.microsoft.com/japan/sql/ssj/tips/01.mspx
SQL Server Browser サービスを開始および停止する方法
http://msdn.microsoft.com/ja-jp/library/ms189093.aspx
SQL Server Configuration Managerでサービスを開始した。これは盲点なので、要注意。
「ホスト名解決も必要」というので、C:\Windows\System32\drivers\etc\lmhostsファイルを編集するかと考えたが、ノートパソコンにはLANケーブルと無線LANの2つのIPアドレスがあるので思案していたが結局不実行。
特定の TCP ポートで受信待ちするようにサーバーを構成する方法
http://msdn.microsoft.com/ja-jp/library/ms177440.aspx
名前付きパイプのエラーなので、これは行っていない。
SQL Server Configuration Managerで、共有メモリプロトコルを無効にし、名前付きパイプの順番を1に、TCP/IPの順番を2にした。
何度も見直して間違いないハズなのに、/localhost/ishop/Default.aspxのエラーが解消されない (ノ_-;)
ある瞬間まで「プログラムは間違いない」と考えていた。でも、SQL Server Management Studio ExpressではWindows認証でちゃんと利用できていることから「SQLServer側の設定は間違いない」と結論した。すると、コーディングに何かがあると仮定できる。
そうなると比較するには、別のソースコードが必要になる。そこで後述するsample.aspxを作成した。
sample.aspxを作ってみると、Web.configに
uid=xxxxxxxx;pwd=xxxxxxxx;User ID=xxxxxxxx;Password=xxxxxxxx;Trusted_Connection=no;
と記述していたが、
User ID=xxxxxxxx;Password=xxxxxxxx;Trusted_Connection=yes;
ですむことが判明した。
で。
/localhost/ishop/sample.aspxがうまく表示された途端、/localhost/ishop/Default.aspxでエラーが出なくなった!?
なぜ??( ̄へ ̄|||)
最終的には
<add name="WebShopConnectionString" connectionString="server=pcname\SQLEXPRESS;User id=username;Password=loginpassword;Trusted_Connection=true;database=iShop;" providerName="System.Data.SqlClient"/>
でうまくいっている。
sample.aspxの内容
<%@ Page Language="C#" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <html> <head runat="server"> <script runat="server"> static DataSet MakeDataSet() { string sqlStr = "SELECT CompanyID,Title,Description,Displayorder FROM CompanyInfo"; string connStr = "Server=pcname\\SQLEXPRESS;User ID=username;Password=loginpassword;" + "Trusted_Connection=yes;" + "database=iShop"; SqlDataAdapter da = new SqlDataAdapter(sqlStr, connStr); DataSet ds = new DataSet(); da.Fill(ds); return ds; } void Page_Load(object s, EventArgs e) { DataGrid1.DataSource = MakeDataSet(); DataGrid1.DataBind(); } </script> </head> <body> ★ <form runat="server"> <asp:DataGrid id="DataGrid1" runat="server" EnableViewState="false" HeaderStyle-BackColor="#aaaadd" /> </form> ★ </body> </html>
出展:ADO.NET基礎講座 初めての.NETデータベース・プログラミング 第4回 データセットを使ったデータベース・アクセス
http://www.atmarkit.co.jp/fdotnet/basics/adonet04/adonet04_03.html
補足:出典より一部変更してある(実はそのままではエラーになったし)。変更後を掲載保存しておくのは、別の機会の接続確認のサンプルコードに利用するつもりなのである。